Ubuntu - Как передать строку JSON в строку?

for file in *; do
    awk 'BEGIN { print "{" }  END { print "\n}" } { printf( "%s",newrec); printf( "\"field%d\": \"%s\"", NR, $0); newrec=",\n" }' "$file" > "${file}.json"
done

NR— количество записей (или строк )в файле, которые уже были обработаны. Это 1при работе в первой строке, 2во второй строке и так далее.

$0— вся неизмененная входная запись (или строка ).

Если имена полей совпадают, вы можете определить массив (e. г.labels[])в строфе BEGIN, а затем обращаться к ним по индексу (e. г.labels[NR]).

0
26.07.2019, 11:28
2 ответа

Я понял, что при передаче "в SSH мне нужно будет использовать \\\", чтобы пропустить его. Таким образом, команда ниже работает.

ssh {target} 'command -j /dev/stdin <<< '{\\\"key\\\":\\\"value\\\"}''
-1
28.01.2020, 03:25

Нет необходимости делать перенаправление строки здесь -частью удаленной команды. Данные, перенаправленные в ssh, попадут на стандартный ввод удаленной команды :

.
ssh remote 'some command' <<<'whatever string'

В вашем случае

ssh target 'command -j /dev/stdin' <<<'{"key":"value"}'

Но это предполагает, что и key, и valueуже закодированы в формате JSON.

Создание JSON с помощьюjq(для получения правильного кодирования значения, предполагая, что оно хранится в переменной оболочки$value):

jq -nc --arg val "$value" '{ key: $val }' | ssh target 'command -j /dev/stdin'

Или используйте joдля записи документа JSON:

jo key="$value" | ssh target 'command -j /dev/stdin'
0
28.01.2020, 03:25

Теги

Похожие вопросы