grep соответствует с string1 или string2 - PullRequest
6 голосов
/ 07 мая 2011

Я хочу выполнить grep 2 шаблона в файле на Solaris UNIX .

Это имя файла grep 'pattern1 ИЛИ pattern2'.

Следующая команда НЕ работает:

grep 'pattern1\|pattern2' filename

Что не так с этой командой?

ПРИМЕЧАНИЕ: Я на Solaris

Ответы [ 6 ]

16 голосов
/ 07 мая 2011

В какой операционной системе вы находитесь?

Он будет работать в системах с GNU grep, но в BSD, Solaris и т. Д. \| не поддерживается.

Попробуйте egrep или grep -E, например

egrep 'pattern1|pattern2'
2 голосов
/ 05 ноября 2014

Если вам нужна функциональность POSIX (то есть поведение, подобное Linux), вы можете поместить POSIX 2-совместимые двоичные файлы в начало вашего пути:

$ echo $PATH
/usr/xpg4/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:[...]

Существует также / usr / xpg6, совместимый с POSIX 1.

/usr/bin: SVID/XPG3
/usr/xpg4/bin: POSIX.2/POSIX.2a/SUS/SUSv2/XPG4
/usr/xpg6/bin: POSIX.1-2001/SUSv3
0 голосов
/ 17 мая 2016

Тайный метод, использующий fgrep (то есть: фиксированные строки), который работает в Solaris 10 ...

Предоставить список шаблонов, каждый шаблон которого отделен NEWLINE, но в кавычкахинтерпретируется оболочкой как одно слово: -

fgrep 'pattern1
pattern2' filename

Этот метод также работает для grep, fgrep и egrep в /usr/xpg4/bin, хотя ERE с разделителями канала в любом egrepиногда является наименее суетливым.

Вы можете вставить произвольные символы новой строки в строку, если ваша оболочка позволяет редактировать историю, например: в bash отпускать C-v C-j в режиме emacs или в режиме vi-command.

0 голосов
/ 07 мая 2011

Это полностью зависит от того, что такое pattern1 и pattern2.Если это просто слова, это должно сработать, иначе вам понадобится:

grep '\(pattern1\)\|\(pattern2\)'
0 голосов
/ 07 мая 2011

Это должно быть правильно.Убедитесь, что вы добавляете или не добавляете соответствующие пробелы, например "pattern1 \ | pattern2" против "pattern1 \ | pattern2".

Вы уверены, что у вас не просто проблемы с делами или что-то еще?попробуйте ключ -i.

0 голосов
/ 07 мая 2011

Эта команда отлично работает для меня.Пожалуйста, добавьте дополнительную информацию, такую ​​как ваша платформа и точное регулярное выражение и содержимое файла, которое вы используете (сведено к наименьшему примеру, который все еще воспроизводит проблему)(Я бы добавил комментарий к вашему сообщению, но у меня недостаточно репутации.)

...