Использование 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
и т.д.