Как заменить '\n' для новой строки на jq [duplicate]

Добавьте полный путь к файлу jar в CLASSPATH. В linux используйте: export CLASSPATH=".:/full/path/to/file.jar:$CLASSPATH". Другой способ работы (без редактирования CLASSPATH) разворачивал банку в текущей папке проекта.

Для меня не работали:

1) Используя опцию -cp с полным путь к файлу jar.

2) Используя -cp только с именем jar, если он находится в текущей папке

3) Копирование флага в текущую папку проекта

4) Копирование банки в стандартное расположение java-банок (/ usr / share / java)

Это решение сообщается для класса com.mysql.jdbc.Driver в mysql-коннекторе -java.5 - *. jar, работающий на Linux с OpenJDK версии 1.7

4
задан jjgong 23 September 2015 в 08:31
поделиться

3 ответа

Ввод, как изначально приведенный, не совсем корректен JSON, и неясно, каков желаемый результат, но может представлять интерес следующее. Он написан для текущей версии jq (версия 1.5), но может быть легко адаптирован для jq 1.4:

def json2qjson:
  def pp: if type == "string" then "\"\(.)\""  else . end;
  . as $in
  | foreach keys[] as $k (null; null; "\"\($k)\": \($in[$k] | pp)" ) ;


def data: {
  "@timestamp": "2015-09-22T10:54:35.449+02:00",
  "@version": 1,
  "HOSTNAME": "server1.example",
  "level": "WARN",
  "level_value": 30000,
  "logger_name": "server1.example.adapter",
  "message": "message",
  "stack_trace": "ERROR LALALLA\nERROR INFO NANANAN\nSOME MORE ERROR INFO\nBABABABABABBA BABABABA ABABBABAA BABABABAB\n"
};

data | json2qjson

Выход:

$ jq -rnf json2qjson.jq
"@timestamp": "2015-09-22T10:54:35.449+02:00"
"@version": 1
"HOSTNAME": "server1.example"
"level": "WARN"
"level_value": 30000
"logger_name": "server1.example.adapter"
"message": "message"
"stack_trace": "ERROR LALALLA
ERROR INFO NANANAN
SOME MORE ERROR INFO
BABABABABABBA BABABABA ABABBABAA BABABABAB
"
2
ответ дан peak 20 August 2018 в 21:08
поделиться
  • 1
    Привет, спасибо за эту информацию. Я хочу, чтобы иметь возможность хвост, кошка, head, printf (или что-то еще), файл журнала и получать вывод с новыми строками, а не\n в значение stack_trace. – jjgong 23 September 2015 в 08:59
  • 2
    jigong. Вы можете делать все это, используя json2qjson, но все зависит от точной природы ввода. У вас есть поток объектов JSON или массив? Если первый, они соответствуют конвенции jsonlines? Кроме того, поскольку jq не имеет опции командной строки для head или tail , вам придется запрограммировать это в jq самостоятельно, если вход не следует за соглашением jsonlines. Короче говоря, ваше заявление о проблеме недостаточно для получения более подробной информации. – peak 23 September 2015 в 14:41
  • 3
    Если вы находитесь на jq 1.4 (версия доступна в текущем банкомате Ubuntu), вы можете использовать sed вместо этого (см. Мой ответ для деталей). – Piotr Findeisen 26 March 2016 в 01:52

Конечно! Используя опцию -r, jq будет печатать содержимое строки непосредственно на терминале, а не как строки, экранированные JSON.

jq -r '.stack_trace'
16
ответ дан Noemi Lapresta 20 August 2018 в 21:08
поделиться
  • 1
    Привет спасибо. Можно ли печатать все остальное как обычно и использовать только -r для значения stack_trace? jq -r '.stack_trace' будет печатать только stack_trace, а не остальную информацию. – jjgong 23 September 2015 в 09:00
  • 2
    Ну, jq всегда выводит действительные элементы JSON, если только не заданы строки на -r. Вы можете сделать какое-то странное преобразование строки для объекта, но вы, вероятно, не хотите этого делать. Какова цель этого преобразования? Похоже, что это вряд ли будет правильным подходом к любой проблеме, которую вы решаете. – Noemi Lapresta 30 September 2015 в 10:24

Если вы не ограничиваете использование jq только , вы можете «исправить» (или фактически «un-json-ify») выход jq с помощью sed:

cat the-input | jq . | sed 's/\\n/\n/g'

Если у вас также есть вкладки на входе (\t в JSON), тогда:

cat the-input | jq . | sed 's/\\n/\n/g; s/\\t/\t/g'

Это было бы особенно удобно, если был создан ваш stack_trace по Java (вы не указали, что является источником журналов), так как строки стека Java начинаются с <tab>at<space>.

Предупреждение: естественно, это не правильно , в некотором смысле, что вход JSON, содержащий \\n, приведет к «выходу», однако он должен привести к выводу «n». Хотя это и не правильно, это, безусловно, достаточно, чтобы заглянуть в данные людей. Шаблоны sed могут быть дополнительно улучшены, чтобы позаботиться об этом (за счет удобства чтения).

1
ответ дан Piotr Findeisen 20 August 2018 в 21:08
поделиться
Другие вопросы по тегам:

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