Как я могу grep две вещи, где есть опция -w?

У меня есть json- файл, откуда я хочу получить значение двух элементов, которые находятся в массиве с помощью grep . Предположим, я пытаюсь получить данные из значений foo и bar , проблема в том, что bar также соответствует megabar поэтому мне нужно grep его с параметром -w .
Проблема возникает, когда вы пытаетесь найти их в одно и то же время, поскольку я должен grep для одного значения ИЛИ другого.
Из этого вопроса мне удалось немного приблизиться к тому, что я искал, но мой результат был примерно таким:

 grep -E '(foo|-w bar)' file "foo": "59766", "foo": "59770", "foo": "59774", "foo": "59778", "foo": "59782", "foo": "59786", 

Любая идея о том, как это сделать?

  • grep содержимое файлов на основе списка файлов
  • найти только первое появление, используя только grep
  • Извлечение координат совпадающего текста в PDF
  • Как проверить, имеет ли файл уже строку с содержимым?
  • Grep для поиска каталогов для шаблонов внутри текстового файла
  • подсчет нескольких шаблонов за один проход с помощью grep?
  • elinks -dump не заканчивается на длинном URL-адресе
  • Совпадение простого регулярного выражения
  • 2 Solutions collect form web for “Как я могу grep две вещи, где есть опция -w?”

    Граница слова имеет аналогичный эффект -w , но может использоваться как часть выражения.

    «\ Ь»
    Сопоставьте пустую строку с краем слова.
    […]
    '\ <'
    Сопоставьте пустую строку в начале слова.
    '\>'
    Сопоставьте пустую строку в конце слова.

    Чтобы соответствовать bar только тогда, когда это целое слово, но где угодно (в том числе внутри более длинных слов):

     grep -E 'foo|\<bar\>' 

    Учитывая, что foo будет использоваться в том же контексте, что и foo, а также соответствует полному слову, самый простой способ – сделать:

     grep -E -w '(foo|bar)' file 
    Linux и Unix - лучшая ОС в мире.