Извлечь подстроку после сопоставления с шаблоном - PullRequest
0 голосов
/ 08 декабря 2018

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

Теперь я не могу поделиться своим файлом отверстий, но давайте рассмотрим этот пример.

Из этой строки:

{"code":"S02A5","name":"18\" Leichtmetallräder Doppelspeiche 397","price":"0","standard":"false"}

Я хочу извлечь эту подстроку

18\" Leichtmetallräder Doppelspeiche 397

До сих пор я пробовал следующее:

Это соответствуетмного результатов

grep -oP '(?<="code":".....","name":")[^"]+'

Я знаю, что первый символ после "name": " всегда 1 , поэтому я попытался использовать это в следующей команде,и возвращаемое значение равно 8 \ , что не так уж и плохо, потому что я могу добавить 1 впоследствии.

grep -oP '(?<="code":".....","name":"1)[^"]+'

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

Есть идеи, как мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Если вы рассматриваете Perl, это должно работать

/tmp> export data='{"code":"S02A5","name":"18\" Leichtmetallräder Doppelspeiche 397","price":"0","standard":"false"}'
/tmp> echo $data | perl -ne  ' /\"name\":(.+?),/ and print "$1\n" '
"18\" Leichtmetallräder Doppelspeiche 397"
/tmp>
0 голосов
/ 08 декабря 2018

Это похоже на JSON, используйте, например, jq:

$ jq '.name' file
"18\" Leichtmetallräder Doppelspeiche 397"

или

$ jq -r '.name' file
18" Leichtmetallräder Doppelspeiche 397

Обновление :

Если вынеобходимо использовать grep

$ grep -oP '(?<="name":")(\\"|[^"])+' file
18\" Leichtmetallräder Doppelspeiche 397

Объяснено:

  • (?<="name":") положительный взгляд позади предшествует "name":"
  • сопровождается \" с или без кавычек

ИЛИ :

Возможно, это должно быть:

$ grep -oP '(?<="name":")((?<![^\\]\\)\\"|[^"])+' file

поскольку это будет соответствовать \" и \\\", но не \\"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...