คำถามติดแท็ก grep

สำหรับคำถามเกี่ยวกับ grep เครื่องมือบรรทัดคำสั่งสำหรับค้นหารูปแบบข้อความในไฟล์ ใช้แท็กนี้สำหรับคำถามเกี่ยวกับ grep หรือคำถามเกี่ยวกับปัญหาที่เกิดขึ้นจากการใช้เครื่องมือบรรทัดคำสั่ง grep

13
ฉันจะ grep สำหรับรูปแบบหลายรูปแบบโดยมีรูปแบบที่มีอักขระไพพ์ได้อย่างไร
ฉันต้องการค้นหาทุกบรรทัดในไฟล์หลายไฟล์ที่ตรงกับหนึ่งในสองรูปแบบ ฉันพยายามค้นหารูปแบบที่ฉันต้องการโดยพิมพ์ grep (foo|bar) *.txt แต่เชลล์ตีความ|ว่าbarเป็นไพพ์และบ่นเมื่อไม่มีการปฏิบัติการ ฉันจะ grep สำหรับหลายรูปแบบในไฟล์ชุดเดียวกันได้อย่างไร?

14
ฉันจะป้องกัน 'grep' ไม่ให้ปรากฏในผลลัพธ์ ps ได้อย่างไร
เมื่อฉันค้นหากระบวนการบางอย่างที่ไม่มีอยู่เช่น $ ps aux | grep fnord wayne 15745 0.0 0.0 13580 928 pts/6 S+ 03:58 0:00 grep fnord เห็นได้ชัดว่าฉันไม่สนใจ grep - ซึ่งก็สมเหตุสมผลกับการค้นหาpsกระบวนการ! ฉันจะป้องกัน grep ไม่ให้ปรากฏในผลลัพธ์ได้อย่างไร
304 grep  ps 

8
grep สามารถส่งออกเฉพาะกลุ่มที่ระบุที่ตรงกันหรือไม่
บอกว่าฉันมีไฟล์: # file: 'test.txt' foobar bash 1 bash foobar happy foobar ฉันแค่อยากรู้ว่าคำใดปรากฏหลัง "foobar" ดังนั้นฉันสามารถใช้ regex นี้: "foobar \(\w\+\)" วงเล็บแสดงว่าฉันมีความสนใจเป็นพิเศษในคำทันทีหลังจาก foobar แต่เมื่อฉันทำgrep "foobar \(\w\+\)" test.txtฉันจะได้ทั้งบรรทัดที่ตรงกับ regex ทั้งหมดมากกว่าเพียงแค่ "คำหลังจาก foobar": foobar bash 1 foobar happy ฉันชอบที่ผลลัพธ์ของคำสั่งนั้นจะเป็นดังนี้: bash happy มีวิธีบอก grep ให้แสดงเฉพาะรายการที่ตรงกับการจัดกลุ่ม (หรือการจัดกลุ่มเฉพาะ) ในนิพจน์ทั่วไปหรือไม่?


6
นับจำนวนการเกิดทั้งหมดโดยใช้ grep
grep -cมีประโยชน์สำหรับการค้นหาจำนวนครั้งที่สตริงเกิดขึ้นในไฟล์ แต่นับเฉพาะแต่ละครั้งที่เกิดขึ้นหนึ่งครั้งต่อบรรทัด จะนับหลายครั้งต่อบรรทัดได้อย่างไร ฉันกำลังมองหาบางสิ่งที่หรูหรากว่า: perl -e '$_ = <>; print scalar ( () = m/needle/g ), "\n"'
215 grep 

9
grep ทำให้อะไรที่พิจารณาว่าเป็นไฟล์ไบนารี่?
ฉันมีฐานข้อมูลบางส่วนจากระบบ Windows บนกล่องของฉัน พวกเขาเป็นไฟล์ข้อความ ฉันใช้ cygwin เพื่อ grep ผ่านพวกเขา ดูเหมือนว่าจะเป็นไฟล์ข้อความธรรมดา ฉันเปิดพวกมันด้วยโปรแกรมแก้ไขข้อความเช่น notepad และ wordpad และพวกมันดูเข้าใจง่าย แต่เมื่อผมทำงาน grep binary file foo.txt matchesกับพวกเขาก็จะบอกว่า ฉันสังเกตว่าไฟล์มีNULอักขระASCII บางตัวซึ่งฉันเชื่อว่าเป็นสิ่งประดิษฐ์จากดัมพ์ของฐานข้อมูล ดังนั้นอะไรทำให้ grep พิจารณาว่าไฟล์เหล่านี้เป็นไบนารี NULตัวละคร? มีการตั้งค่าสถานะบนระบบแฟ้มหรือไม่? ฉันต้องเปลี่ยนอะไรเพื่อให้ grep แสดงบรรทัดที่ตรงกัน
185 grep 

6
ฉันจะ grep ซ้ำผ่านไฟล์. gz ได้อย่างไร
ฉันใช้สคริปต์เพื่อดาวน์โหลดข้อความ gmail ของฉันที่บีบอัดไฟล์. eml แบบ raw เป็นไฟล์. gz เป็นประจำ สคริปต์สร้างโฟลเดอร์สำหรับแต่ละวันจากนั้นบีบอัดทุกข้อความเป็นไฟล์ของตัวเอง ฉันต้องการค้นหาวิธีผ่าน "เก็บถาวร" นี้เพื่อค้นหา Grep เพียงอย่างเดียวดูเหมือนจะไม่ทำเช่นนั้น ฉันยังลอง SearchMonkey


5
grep สามารถส่งคืนจริง / เท็จหรือมีวิธีการอื่น
ในฐานะที่เป็นส่วนหนึ่งของสคริปต์นี้ฉันต้องสามารถตรวจสอบได้ว่าอาร์กิวเมนต์แรกที่ระบุตรงกับคำแรกของไฟล์หรือไม่ หากเป็นเช่นนั้นให้ออกด้วยข้อความแสดงข้อผิดพลาด หากไม่มีให้ต่อท้ายอาร์กิวเมนต์ลงในไฟล์ ฉันเข้าใจวิธีเขียนifคำสั่ง แต่ไม่ใช่วิธีใช้grepภายในสคริปต์ ฉันเข้าใจว่าgrepจะมีลักษณะเช่นนี้ grep ^$1 schemas.txt ฉันรู้สึกว่ามันน่าจะง่ายกว่าที่ฉันทำ ฉันได้รับข้อผิดพลาด "มีการโต้แย้งมากเกินไป" ในifคำสั่ง ฉันกำจัดช่องว่างระหว่างgrep -qแล้วก็เกิดข้อผิดพลาดของผู้ให้บริการไบนารี่ if [ grep -q ^$1 schemas.txt ] then echo "Schema already exists. Please try again" exit 1 else echo "$@" >> schemas.txt fi
130 grep 

11
โน้มน้าวให้ grep ส่งออกทุกบรรทัดไม่ใช่เฉพาะกับการแข่งขัน
ว่าฉันมีไฟล์ต่อไปนี้: $ cat test test line 1 test line 2 line without the search word another line without it test line 3 with two test words test line 4 ตามค่าเริ่มต้นให้grepส่งคืนแต่ละบรรทัดที่มีคำค้นหา: $ grep test test test line 1 test line 2 test line 3 with two test words test line 4 …
121 grep  highlighting 

4
ส่งคืนเฉพาะส่วนของบรรทัดหลังจากรูปแบบการจับคู่
ดังนั้นการดึงเปิดไฟล์ด้วยcatและจากนั้นใช้grepในการรับสายการจับคู่เพียงทำให้ฉันได้รับเมื่อฉันทำงานกับชุดบันทึกเฉพาะที่ฉันจัดการกับ มันต้องการวิธีการจับคู่ลายเส้นกับรูปแบบ แต่เพื่อคืนส่วนของเส้นหลังการจับคู่เท่านั้น ส่วนก่อนและหลังการแข่งขันจะแตกต่างกันอย่างสม่ำเสมอ ฉันได้เล่นโดยใช้sedหรือawkแต่ไม่สามารถหาวิธีกรองบรรทัดเพื่อลบส่วนหนึ่งก่อนการแข่งขันหรือเพียงแค่คืนส่วนหลังการแข่งขันทั้งคู่จะทำงาน นี่คือตัวอย่างของบรรทัดที่ฉันต้องการกรอง: 2011-11-07T05:37:43-08:00 <0.4> isi-udb5-ash4-1(id1) /boot/kernel.amd64/kernel: [gmp_info.c:1758](pid 40370="kt: gmp-drive-updat")(tid=100872) new group: <15,1773>: { 1:0-25,27-34,37-38, 2:0-33,35-36, 3:0-35, 4:0-9,11-14,16-32,34-38, 5:0-35, 6:0-15,17-36, 7:0-16,18-36, 8:0-14,16-32,34-36, 9:0-10,12-36, 10-11:0-35, 12:0-5,7-30,32-35, 13-19:0-35, 20:0,2-35, down: 8:15, soft_failed: 1:27, 8:15, stalled: 12:6,31, 20:1 } ส่วนที่ฉันต้องการคือทุกอย่างหลังจาก "จนตรอก" เบื้องหลังที่อยู่เบื้องหลังคือฉันสามารถค้นหาได้ว่ามีบางสิ่งที่แผงลอย: cat messages | grep stalled | wc -l …


7
มีการสอนพื้นฐานสำหรับ grep, awk และ sed หรือไม่? [ปิด]
ฉันเคยเป็นผู้ใช้ลีนุกซ์มาระยะหนึ่งแล้วและฉันก็เข้าใจดีมากเกี่ยวกับยูทิลิตี้บรรทัดคำสั่งทั่วไป แต่คนที่มาขึ้นและขึ้นอีกครั้งในความสัมพันธ์กับการเขียนโปรแกรมgrep, และawksed เกี่ยวกับสิ่งเดียวที่ฉันใช้ grep สำหรับคือการวางข้อมูลลงในไฟล์เพื่อค้นหาไฟล์ในล็อกไฟล์ผลลัพธ์ของไฟล์psอื่น ๆ ที่ฉันไม่ได้ใช้awkหรือsedเลย มีแบบฝึกหัดที่ดีสำหรับสาธารณูปโภคเหล่านี้หรือไม่?
95 grep  sed  awk 

2
ทำไม grep ไม่สนใจไฟล์ไบนารีโดยปริยาย
manpage สำหรับgrepอธิบาย-Iแฟล็กดังนี้: -I Ignore binary files. This option is equivalent to --binary-file=without-match option. มันยังบอกว่าเรื่องนี้เกี่ยวกับไฟล์ไบนารี: --binary-files=value Controls searching and printing of binary files. Options are binary, the default: search binary files but do not print them; without-match: do not search binary files; and text: treat all files as text. ฉันไม่สามารถนึกถึงสถานการณ์ที่ฉันสนใจเกี่ยวกับการจับคู่ในไฟล์ไบนารี หากสถานการณ์ดังกล่าวมีอยู่แน่นอนมันจะต้องเป็นข้อยกเว้นมากกว่าบรรทัดฐาน …
94 grep 

8
วิธีการเรียกใช้ grep ที่มีหลายรูปแบบและ?
ฉันต้องการได้รับการจับคู่หลายรูปแบบโดยนัยและระหว่างรูปแบบเช่นเทียบเท่ากับการรัน greps หลายตัวตามลำดับ: grep pattern1 | grep pattern2 | ... ดังนั้นวิธีการแปลงเป็นบางอย่างเช่น? grep pattern1 & pattern2 & pattern3 ฉันต้องการใช้ grep เดี่ยวเพราะฉันกำลังสร้างข้อโต้แย้งแบบไดนามิกดังนั้นทุกอย่างต้องพอดีในสายเดียว การใช้ตัวกรองคือคุณสมบัติของระบบไม่ใช่ grep ดังนั้นจึงไม่ใช่ข้อโต้แย้ง อย่าสับสนคำถามนี้ด้วย: grep "pattern1\|pattern2\|..." นี่คือการจับคู่รูปแบบOR หรือหลายแบบ

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