Использование grep для поиска нескольких ключевых слов в разных строках - PullRequest
0 голосов
/ 03 октября 2018

Я заканчиваю игру / вызов из командной строки, которая включает раскрытие тайны убийства.

Один из шагов - поиск подозреваемого с помощью grep для поиска нескольких ключевых слов в одном файле.

Однако этот файл содержит тысячи строк текста в следующем формате:

License Plate: L337ZR9
Make: Honda
Color: Red
Owner: Katie Park
Height: 6'2"

Я пытался использовать grep следующими способами:

cat vehicles | grep -i 'L337' | grep -i 'honda'
ls | grep -i 'honda\|blue\|L337'

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

Какая команда мне нужна для поиска файла транспортного средства и отображения совпадений только для Blue Honda с номерным знаком L337 - вДругими словами, какая команда позволяет grep находить и отображать результаты нескольких подходящих поисковых запросов?

Ответы [ 2 ]

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

Сначала поймите, что вы grep ping-записей, а не строк.

Итак, объедините 5-строчные записи в одну строку:

cat licenseplates | paste - - - - -

Теперь это неожиданно легко grep:

cat licenseplates | paste - - - - - |
  grep -i 'L337' | grep -i 'honda' | grep -i blue

Наконец, вам нужно сложить совпадающие строки в 5 строк записи:

cat licenseplates | paste - - - - - |
  grep -i 'L337' | grep -i 'honda' | grep -i blue |
  sed 's/\t/\n/g'
0 голосов
/ 03 октября 2018

Использование GNU grep.

Пример

Источник

License Plate: L337ZR9
Make: Honda
Color: Blue
Owner: Katie Park
Height: 6'2"
License Plate: L338ZR9
Make: Honda
Color: Black
Owner: James Park
Height: 6'0"

Команда

grep -Pzo '\w+:\s*L337ZR9\n\w+:\s+Honda\n\w+:\s*Blue' file

Результат

Plate: L337ZR9
Make: Honda
Color: Blue

Объяснение

От grep человек:

   -z, --null-data
          Treat the input as a set of lines,

ПРИМЕЧАНИЕ : grep (GNU grep) 2.20 проверено

...