Bagaimana cara grep untuk pipa |

14

Bagaimana saya bisa grep untuk baris yang mengandung karakter pipa |atau untuk karakter >:

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

sekarang yang saya butuhkan menggunakan perintah grep adalah

grep -iE "<some expression>" file_name

Keluaran:

|this is test
where is >
Özzesh
sumber

Jawaban:

10

Dengan grepsintaks standar :

grep '[>|]'

atau

grep -e '>' -e '|'

atau

grep '>
|'

atau

grep -E '>|\|'
Stéphane Chazelas
sumber
6

Jika Anda menggunakan GNU grep Anda dapat melakukan ini dengan operator atau ( |), yang harus diloloskan (didahului oleh garis miring terbalik \). Jadi untuk menemukan garis yang mengandung pipa atau tanda yang lebih besar, sertakan secara harfiah dengan operator atau :

grep '|\|>' infile

Keluaran:

|this is test
where is >
Thor
sumber
4
\|bukan BREoperator standar , meskipun bekerja dengan GNU grepyang grepditemukan di sebagian besar sistem Operasi yang dibangun di sekitar kernel Linux.
Stéphane Chazelas
@StephaneChazelas: terima kasih telah menunjukkan ini, saya tidak menyadarinya. Saya mengoreksi teks.
Thor
1
Ya, operator pergantian adalah satu-satunya tambahan nyata dari EREs atas BREs, sisanya ( +, ?) menjadi gula sintaksis untuk \{1,\}dan \{0,1\}. (di sisi lain, referensi lepas ERE ( \(.\)\1) yang hanya merupakan fitur BRE)
Stéphane Chazelas
1

Menggunakan ekspresi braket untuk mencocokkan salah satu karakter yang diinginkan:

grep "[|>]" infile

Keluaran:

|this is test
where is >
zagrimsan
sumber
3
Tidak perlu -iatau di -Esini.
Stéphane Chazelas
Itu benar, diakui.
zagrimsan
0

Cara yang benar untuk mencapainya adalah menggunakan flag -e yang ditentukan oleh POSIX. Misalnya:

grep -e '>\||' infile
Valentin Bajrami
sumber
1
grep -e '>' -e '|' infilebekerja juga.
ott--
2
-editentukan oleh POSIX tetapi tidak berguna di sini. \|tidak ditentukan oleh POSIX.
Stéphane Chazelas