найти текст после заданной строки в файле

Э-э, что-то совершенно новое для меня ():прочитать ответ по использованию PS4:как перехватывать каждую команду

Если только что проверили:

bash: PS4='$(echo $(date) $(history 1) >> /tmp/trace.txt) TRACE: '
bash: set -x
bash: date
 TRACE: date
Fr 28. Jul 14:13:24 CEST 2017

Как описано в ответе выше, PS4 ... оценивается для каждой выполняемой команды... . Таким образом, если вы замените это, чтобы передать любую из ваших команд через вашу оболочку и подтвердить ее выполнение, таким образом вы сможете перехватить любую из ваших команд.

1
21.10.2019, 15:26
2 ответа

Используйте jqдля анализа jsonданных:

jq -r '._source.firstname'

С входными данными из вопроса он показывает желаемый результат.

5
27.01.2020, 23:15

В принципе, упомянутые специализированные парсеры JSON являются правильным подходом. Если по какой-то причине это не работает для вас, и вас действительно интересует только это конкретное значение поля, тогда следующее быстрое, но грязное(!! )хак для извлечения значения поля:

awk '{split($1,fld,"\"firstname\":\"[[:alnum:]]*\"",sep); print(sep[1])}' <filename> | sed -e "s/\"firstname\":\"//" -e "s/\"$//"

Это в основном использует шаблон "firstname":"<some string>"в качестве разделителя полей, печатает фактическое значение разделителя полей (, которое будет "firstname":"Blake"в вашем случае ), и передает его через sed, чтобы удалить метку поля, начальную двойную кавычку -и замыкающую двойную кавычку -.

Опять же, это грязный взлом, и по возможности следует использовать специальный инструмент.

0
27.01.2020, 23:15

Теги

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