ทำไม“ คำหลัก grep” ทำให้เทอร์มินัลคงอยู่ตลอดไป?


25

เมื่อฉันพิมพ์ "หมอ grep" ใน terminal มันก็ไม่ได้ทำอะไรหยุดขั้วจากการทำอะไรอย่างอื่นก่อนที่จะหลบหนีโดยใช้Ctrl+ หรือCZ

ฉันรู้ว่านี่ไม่ใช่วิธีที่ฉันควรใช้ grep แต่แค่อยากรู้ว่าทำไมสิ่งนี้ถึงเกิดขึ้น

คำตอบ:


40

grep โดยค่าเริ่มต้นค้นหาอินพุตมาตรฐานหากไม่มีไฟล์:

grep ค้นหาไฟล์อินพุตที่ระบุชื่อ (หรืออินพุตมาตรฐานหากไม่มีไฟล์ชื่อหรือหากมีเครื่องหมายยัติภังค์ลบ (-) เดียวเป็นชื่อไฟล์) สำหรับบรรทัดที่มีการจับคู่กับรูปแบบที่กำหนด โดยค่าเริ่มต้น grep จะพิมพ์บรรทัดที่ตรงกัน

หากคุณเพียงแค่grep docgrep คาดว่าอินพุตมาตรฐานมาและค้นหาข้างใน (อย่าป้อนชิ้นส่วนระหว่าง<และ>เข้าไปในเทอร์มินัลนี่คือความคิดเห็น):

$ grep doc
a b c <PRESS ENTER HERE>
doc <NO MATCH WAS FOUND IN PREVIOUS LINE, TYPE doc AND PRESS ENTER AGAIN>
doc <MATCH WAS FOUND>

6
OP ยังสามารถกด Ctrl + D บนบรรทัดด้วยตัวเองเพื่อสิ้นสุด grep "เซสชั่น"
Kevin

2
คำตอบที่ดี. แค่ต้องการทราบว่าไม่มีใครต้องการ grep มากนักโดยการพิมพ์เช่นนั้น แต่ช่วยให้คุณไพพ์เอาต์พุตมาตรฐานจากคำสั่งก่อนหน้าซึ่งมีประโยชน์มาก
Karl Bielefeldt

20
@KarlBielefeldt: จริงๆแล้วมันเป็นวิธีที่สะดวกในการดีบัก regexps ที่ซับซ้อน คุณสามารถเรียกใช้สิ่งที่ต้องการgrep '([a-z]+[0-9]*.x){2,3}'และพิมพ์บรรทัดตัวอย่างจำนวนมากบนแป้นพิมพ์เพื่อให้แน่ใจว่าตรงกับสิ่งที่คุณคิด เส้นที่ตรงกันจะได้รับการสะท้อนเส้นที่ไม่ได้จะไม่
Nate Eldredge

1
@NateEldredge: ขอบคุณที่ให้ตัวอย่างที่เป็นประโยชน์สำหรับสิ่งนี้! ฉันมักจะดูที่การโมฆะการขอร้องโมฆะของสิ่งต่าง ๆ เช่น grep และ cat เป็นหลักทางทฤษฎี
เขาวงกต

1
@labyrinth พวกเขาไม่ได้ใช้ทฤษฎีเลยพวกเขาจะใช้ตลอดเวลาเมื่อมีการวางท่อเช่นsomecommand | grep foo
Barmar

14

grep กำลังรอการป้อนข้อมูล

จากman grep:

[...]
DESCRIPTION
       grep  searches  the named input FILEs (or standard input if no files are named
[...]
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.