Grep egrep несколько строк
Предположим, что у меня есть несколько строк: str1 и str2 и str3.
- Как найти строки со всеми строками?
- Как найти строки, которые могут иметь любой из них?
- И как найти строки с str1 и str2 и str3 [но не оба?]?
Ответы
Ответ 1
Это выглядит как три вопроса. Самый простой способ собрать эти выражения вместе - это несколько каналов. Там нет стыда, особенно потому, что регулярное выражение (с использованием egrep) было бы неуклюжим, поскольку вы, кажется, подразумеваете, что хотите независимость заказа.
Итак, по порядку,
-
grep str1 | grep str2 | grep str3
-
egrep '(str1 | str2 | str3)'
-
grep str1 | egrep '(str2 | str3)'
вы можете сделать "и" форму в независимом порядке, используя egrep, но я думаю, вам будет легче запомнить независимость от заказа и использовать с помощью конвейерных команд grep и order независимо или с использованием регулярных выражений.
Ответ 2
Вы не можете разумно выполнить "все" или "этот плюс любой из этих" случаев, потому что grep
не поддерживает lookahead. Используйте Perl. Для "любого" случая это egrep '(str1|str2|str3)' file
.
Необоснованный способ сделать "все" случай:
egrep '(str1.*str2.*str3|str3.*str1.*str2|str2.*str1.*str3|str1.*str3.*str2)' file
то есть. вы строите перестановки. Это, конечно, смешная вещь.
Для "этого плюс любого из них" аналогично:
egrep '(str1.*(str2|str3)|(str2|str3).*str1)' file
Ответ 3
grep -E --color "string1 | string2 | string3...."
например, чтобы определить, работает ли наша система с процессором AMD (svm) или Intel (vmx) и 64-битная (lm) lm для длинного режима, что означает 64-битный...
пример команды:
grep -E --color "lm | svm | vmx" /proc/cpuinfo
-E необходимо найти несколько строк
Ответ 4
Лично я делаю это в perl, а не пытаюсь собрать что-то с grep.
Например, для первого:
while (<FILE>)
{
next if ! m/pattern1/;
next if ! m/pattern2/;
next if ! m/pattern3/;
print $_;
}