Использование grep для нескольких шаблонов поиска

Рассмотрим, что у меня есть следующий поток данных:

BODY1
attrib1:  someval11
attrib2:  someval12
attrib3:  someval13

BODY2
attrib1:  someval21
attrib2:  someval22
attrib3:  someval23

BODY3
attrib1:  someval31
attrib2:  someval32
attrib3:  someval33

Я хочу извлечь только attrib1 и attrib3 для каждого BODY, т.е.

attrib1:  someval11
attrib3:  someval13
attrib1:  someval21
attrib3:  someval23
attrib1:  someval31
attrib3:  someval33

Я пробовал

grep 'attrib1\|attrib3', согласно этот сайт, но ничего не вернул. grep attrib1 и grep attrib2 возвращают данные, но только для указанного одиночного шаблона.

Ответ 1

grep -e 'attrib1' -e 'attrib3' file

На странице man:

-e PATTERN, --regexp = PATTERN
              Используйте PATTERN в качестве шаблона. Это можно использовать для указания               несколько шаблонов поиска или для защиты шаблона, начинающегося с               дефис (-). (-e указан POSIX.)

Изменить: Кроме того, вы можете сохранять шаблоны в файле и использовать опцию -f:

[email protected]:~$ cat>patt
attrib1
attrib3

[email protected]:~$ grep -f patt test
attrib1:  someval11
attrib3:  someval13
attrib1:  someval21
attrib3:  someval23
attrib1:  someval31
attrib3:  someval33

Ответ 2

Также egrep;

egrep "pattern1|pattern2|pattern3" file

Ответ 3

очень простая команда:

bash> grep  "attrib1\|attrib3" <file.name>

attrib1: someval11 attrib3: someval13 attrib1: someval21 attrib3: someval23 attrib1: someval31 attrib3: someval33

Ответ 4

Это работает с GNU grep 2.6.3

grep "attrib[13]"

или

 grep "^[^0-9]*[13]:"

Ответ 5

Это зависит от вашей оболочки. grep -iw 'patter1\|patter2\|pattern3' работает в оболочке bash, где она не работает на оболочке korn. Для оболочки korn нам, возможно, придется попробовать grep -e pattern1 -e patter2 и т.д.