Как grep для трубы |


14

Как я могу grep для строки, содержащей символ трубы |или для символа >:

files content:
|this is test
where is >
this is none

Теперь, что мне нужно с помощью команды grep

grep -iE "<some expression>" file_name

Выход:

|this is test
where is >

Ответы:



6

Если вы используете GNU grep, вы можете сделать это с помощью оператора или ( |), который должен быть экранирован (с обратной косой чертой \). Таким образом, чтобы найти строки, содержащие либо трубу, либо знак «больше, чем», включите их буквально с помощью оператора или :

grep '|\|>' infile

Выход:

|this is test
where is >

4
\|не является стандартным BREоператором, хотя он работает с GNU, grepкоторый grepвстречается в большинстве операционных систем, построенных на ядре Linux.
Стефан Шазелас

@ StephaneChazelas: спасибо за указание на это, я не знал об этом. Я исправил текст.
Тор

1
Да, оператор чередования является единственным реальным добавлением ERE к BRE, а остальные ( +, ?) являются синтаксическим сахаром для \{1,\}и \{0,1\}. (с другой стороны, ERE освобождают обратные ссылки ( \(.\)\1), которые являются только функцией BRE)
Стефан Шазелас

1

Использование выражения в скобках для сопоставления с любым из требуемых символов:

grep "[|>]" infile

Выход:

|this is test
where is >

3
Нет необходимости либо -iили -Eздесь.
Стефан Шазелас

Это правда, признал.
Загримсан

0

Правильный способ сделать это - использовать флаг -e, указанный в POSIX. Например:

grep -e '>\||' infile

1
grep -e '>' -e '|' infileтоже работает
ot--

2
-eопределяется POSIX, но здесь не используется. \|не указывается в POSIX.
Стефан Шазелас
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.