วิธีการ 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

หากคุณใช้ grep ของ GNU คุณสามารถทำได้ด้วยตัวดำเนินการหรือ ( |) ซึ่งควรหลีกเลี่ยง (นำหน้าด้วยแบ็กสแลช\) ดังนั้นหากต้องการค้นหาบรรทัดที่มีไพพ์หรือเครื่องหมายมากกว่ารวมอยู่ด้วยกับตัวดำเนินการหรือ :

grep '|\|>' infile

เอาท์พุท:

|this is test
where is >

4
\|ไม่ใช่ตัวBREดำเนินการมาตรฐานแม้ว่าจะทำงานกับ GNU grepซึ่งgrepพบในระบบปฏิบัติการส่วนใหญ่ที่สร้างขึ้นรอบ ๆ เคอร์เนล Linux
Stéphane Chazelas

@StephaneChazelas: ขอบคุณที่ชี้ให้เห็นว่าฉันไม่ได้ตระหนักถึงมัน ฉันแก้ไขข้อความ
Thor

1
ใช่ผู้ประกอบการสำรองเป็นเพียงการเพิ่มจริงของ EREs มากกว่า BREs ส่วนที่เหลือ (+ , ?) เป็นน้ำตาลประโยคสำหรับและ\{1,\} \{0,1\}(ในทางกลับกัน EREs อ้างอิงย้อนกลับหลวม\(.\)\1) ( ซึ่งเป็นคุณสมบัติเฉพาะ BRE)
Stéphane Chazelas

1

การใช้วงเล็บเหลี่ยมเพื่อจับคู่อักขระที่ต้องการ:

grep "[|>]" infile

เอาท์พุท:

|this is test
where is >

3
ไม่จำเป็นต้องใช้อย่างใดอย่างหนึ่ง-iหรือ-Eที่นี่
Stéphane Chazelas

นั่นเป็นเรื่องจริงเป็นที่ยอมรับ
zagrimsan

0

วิธีที่ถูกต้องในการทำให้สำเร็จคือการใช้แฟล็ก -e ซึ่งระบุโดย POSIX เช่น:

grep -e '>\||' infile

1
grep -e '>' -e '|' infileทำงานเกินไป
ott--

2
-eระบุโดย POSIX แต่ไม่มีประโยชน์ที่นี่ \|ไม่ได้ระบุโดย POSIX
Stéphane Chazelas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.