Распечатать все экземпляры соответствующего шаблона в файле - PullRequest
0 голосов
/ 14 ноября 2018

Я пытался распечатать все экземпляры соответствующего шаблона из файла.

Входной файл:

{"id":"prod123","a":1.3,"c":"xyz","q":2}, 
{"id":"prod456","a":1.3,"c":"xyz","q":1}]}
{"id":"prod789","a":1.3,"currency":"xyz","q":2}, 
{"id":"prod101112","a":1.3,"c":"xyz","q":1}]}

Я бы хотел напечатать все от "id":" до ",.

Ожидаемый результат:

prod123
prod456
prod789
prod101112

Я использую команду

grep -Eo 'id\"\:\"[^"]+"\"\,*' | grep -Eo '^[^"]+'

Я что-то здесь упускаю?

1 Ответ

0 голосов
/ 14 ноября 2018

Что пошло не так, так это место запятой в первом grep:

grep -Eo 'id.\:.[^"]+"\,"' inputfile

Вам нужно сделать что-то дополнительное для получения нужной подстроки.

grep -Eo 'id.\:.[^"]+"\,"' inputfile | cut -d: -f2 | grep -Eo '[^",]+'

Я использовал cut, это было бы легко для вашего примера ввода.

cut -d'"' -f4 < inputfile

У вас есть альтернативы, такие как jq или

sed -r 's/\{"id":"([^"]*).*/\1/' inputfile

или с использованием awk (решение теперь похоже на cut, но его можно легко изменить)

awk -F'"' '{print $4}' inputfile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...