grep egrep несколько строк - PullRequest
       20

grep egrep несколько строк

14 голосов
/ 04 октября 2009

Предположим, у меня есть несколько строк: str1 и str2 и str3.

  • Как найти строки, в которых есть все строки?
  • Как найти строки, которые могут иметь любую из них?
  • А как найти строки, которые имеют str1 и str2 и str3 [, но не оба? ]?

Ответы [ 4 ]

28 голосов
/ 04 октября 2009

Это похоже на три вопроса. Самый простой способ соединить эти виды выражений - использовать несколько каналов. В этом нет ничего постыдного, особенно потому, что регулярное выражение (использующее egrep ) было бы неловким, поскольку вы, похоже, подразумеваете, что хотите независимости от заказа.

Итак, по порядку,

  1. grep str1 | grep str2 | grep str3

  2. egrep '(str1 | str2 | str3)'

  3. grep str1 | egrep '(str2 | str3)'

Вы можете сделать форму "и" независимым от порядка способом, используя egrep, но я думаю, вам будет проще запомнить независимый от заказа и использующий конвейерные greps и независимый от порядка или использующий регулярные выражения.

8 голосов
/ 04 октября 2009

Вы не можете разумно выполнить "все" или "это плюс любой из этих" случаев, потому что grep не поддерживает прогнозирование Используйте 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
4 голосов
/ 24 февраля 2014

grep -E --color "string1 | string2 | string3 ...."

например, чтобы определить, использует ли наша система процессор AMD (svm) или Intel (vmx) и если он равен 64 бит (лм), lm обозначает длинный режим - это означает 64 бит ...

пример команды:

grep -E - цвет "lm | svm | vmx" / proc / cpuinfo

-E необходимо найти несколько строк

0 голосов
/ 04 октября 2009

Лично я делаю это в perl, а не пытаюсь собрать что-то с помощью grep.

Например, для первого:

while (<FILE>)
{
   next if ! m/pattern1/;
   next if ! m/pattern2/;
   next if ! m/pattern3/;

   print $_;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...