Як гребіть за трубу |


14

Як я можу схватитися за лінію, що містить символ труби, |або для символу >:

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, ви можете зробити це за допомогою оператора or ( |), який повинен бути уникнути (перед цим слід провести зворотну косу рису \). Отже, щоб знайти лінії, що містять або трубу, або знак, що перевищує значення, включіть їх буквально разом із оператором або :

grep '|\|>' infile

Вихід:

|this is test
where is >

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

@StephaneChazelas: дякую, що вказав на це, я про це не знав. Я виправив текст.
Тор

1
Так, оператор чергування є єдиним реальним доповненням ERE над BRE, решта ( +, ?) - синтаксичний цукор для \{1,\}та \{0,1\}. (з іншого боку, EREs відновлює посилання ( \(.\)\1), які є лише BRE)
Stéphane Chazelas

1

Використовуючи дужковий вираз, щоб відповідати будь-якому з шуканих символів:

grep "[|>]" infile

Вихід:

|this is test
where is >

3
Не потрібно ні тут, -iні -Eтут.
Стефан Шазелас

Це правда, визнаємо.
zagrimsan

0

Правильним способом його виконання є використання прапора -e, який задається POSIX. Наприклад:

grep -e '>\||' infile

1
grep -e '>' -e '|' infileпрацює теж.
ott--

2
-eвизначено POSIX, але тут не корисний. \|не визначено POSIX.
Стефан Шазелас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.