LINUX.ORG.RU

История изменений

Исправление alozovskoy, (текущая версия) :

sed обязательно?

$ echo '[..."serialNumber":"1","subject":"service.site.com","issuer":"CA","validFrom":1455235200000,"validTo":1,"numLogs":3,"hash":"a","firstDnsName":"service.site.com","numDnsNames":1},{"serialNumber":"4","subject":"vc.site.com","issuer":"abc","validFrom":4,"validTo":3,"numLogs":3,"hash":"a","firstDnsName":"vc.site.com","numDnsNames":1}...]' | awk -F=":" -v RS="," '$1~/"subject"/ {print}' | sed 's/\"//g; s/subject://g'
service.site.com
vc.site.com

Но вообще если тебе json парсить так возьми нормальный инструмент.

Что касается того, почему выбирается вся строка в первом случае - это называется «жадные» выражения или как-то так - в общем когда ты говоришь «выбирать текст до кавычки» он (sed) захавает столько текста, сколько сможет пока не наткнется на последнюю возможную кавычку. То же самое и с тем почему выбирается только последний вариант - пропущено будет столько ".*"-символов, сколько будет возможно пока не придем к последней возможной выборке. Не знаю как это объяснить нормальным языком и скорее всего что-то напутал (никогда не занимался таким парсингом на sed), но примерно суть такая.

Исходная версия alozovskoy, :

sed обязательно?

$ echo '[..."serialNumber":"1","subject":"service.site.com","issuer":"CA","validFrom":1455235200000,"validTo":1,"numLogs":3,"hash":"a","firstDnsName":"service.site.com","numDnsNames":1},{"serialNumber":"4","subject":"vc.site.com","issuer":"abc","validFrom":4,"validTo":3,"numLogs":3,"hash":"a","firstDnsName":"vc.site.com","numDnsNames":1}...]' | awk -F=":" -v RS="," '$1~/"subject"/ {print}' | sed 's/\"//g; s/subject://g'
service.site.com
vc.site.com

Но вообще если тебе json парсить так возьми нормальный инструмент.

Что касается того, почему выбирается вся строка в первом случае - это называется «жадные» выражения или как-то так - в общем когда ты говоришь «выбирать текст до кавычки» он (sed) захавает столько текста, сколько сможет. То же самое и с тем почему выбирается только последний вариант - пропущено будет столько ".*"-символов, сколько будет возможно пока не придем к последней возможной выборке. Не знаю как это объяснить нормальным языком и скорее всего что-то напутал (никогда не занимался таким парсингом на sed), но примерно суть такая.