используя sed, чтобы найти значение с помощью регулярного выражения - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь получить значение из некоторого вывода. Допустим, я хочу свойство id этого объекта json:

{"id":123,"useless1":"uselessValue","useless2":uselessValue}

Я пробовал это:

a={"id":123,"useless1":"uselessValue","useless2":uselessValue}
echo $a | sed -e s/.*"id":(\d+).*/$1/g

Но возвращается {"id":123,"useless1":"uselessValue","useless2":uselessValue}

Я также попробовал этот пример

Если я копирую:

echo "12 BBQ ,45 rofl, 89 lol" | sed -e 's/.*(\d+) rofl.*/$1/g'

Я получаю:

12 BBQ ,45 rofl, 89 lol

вместо 45

Я использую MacOs High Sierra (10.13.6)

1 Ответ

0 голосов
/ 31 октября 2018

Если вы используете jq, это будет так же просто, как

jq '.id' file

Если вы хотите исправить команду sed, обязательно используйте шаблон, совместимый с BRE POSIX, и \1 заполнитель в RHS:

sed -e 's/.*"id":\([0-9][0-9]*\).*/\1/'

POIs:

  • Группы захвата определяются с помощью \(...\)
  • Одна или несколько цифр совпадают с [0-9][0-9]*
...