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

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

30
ฉันจะค้นหาไฟล์ทั้งหมดที่มีข้อความเฉพาะบน Linux ได้อย่างไร
ต้องการปรับปรุงโพสต์นี้หรือไม่? ให้คำตอบโดยละเอียดสำหรับคำถามนี้รวมถึงการอ้างอิงและคำอธิบายว่าทำไมคำตอบของคุณถึงถูกต้อง คำตอบที่ไม่มีรายละเอียดเพียงพออาจแก้ไขหรือลบออกได้ ฉันพยายามหาวิธีสแกนระบบ Linux ทั้งหมดของฉันสำหรับไฟล์ทั้งหมดที่มีสตริงข้อความที่เฉพาะเจาะจง เพียงชี้แจงฉันกำลังมองหาข้อความภายในไฟล์ไม่ใช่ในชื่อไฟล์ เมื่อฉันมองหาวิธีการทำสิ่งนี้ฉันเจอวิธีแก้ปัญหานี้สองครั้ง: find / -type f -exec grep -H 'text-to-find-here' {} \; อย่างไรก็ตามมันใช้งานไม่ได้ ดูเหมือนว่าจะแสดงไฟล์ทุกไฟล์ในระบบ นี่เป็นวิธีที่เหมาะสมในการทำสิ่งนี้หรือไม่? ถ้าไม่ฉันควรทำอย่างไร ความสามารถในการค้นหาสตริงข้อความในไฟล์นี้จะเป็นประโยชน์อย่างยิ่งสำหรับโครงการการเขียนโปรแกรมบางอย่างที่ฉันทำ
5257 linux  text  grep  directory  find 



15
วิธี grep (ค้นหา) รหัสที่กำหนดในประวัติ Git
ฉันได้ลบไฟล์หรือรหัสบางส่วนในไฟล์บางครั้งในอดีต ฉันสามารถ grep ในเนื้อหา (ไม่ใช่ในการส่งข้อความ)? วิธีแก้ปัญหาที่แย่มากคือการ grep บันทึก: git log -p | grep <pattern> อย่างไรก็ตามสิ่งนี้จะไม่ส่งคืนแฮชการกระทำทันที ฉันเล่นไปรอบ ๆ โดยgit grepไม่มีประโยชน์
1434 git  grep  diff 

4
ฉันจะใช้ grep เพื่อแสดงชื่อไฟล์บน Linux ได้อย่างไร
ฉันgrepจะใช้เพื่อแสดงเฉพาะชื่อไฟล์ (ไม่มีข้อมูลที่ตรงกันในบรรทัด) บน Linux ได้อย่างไร ฉันมักจะใช้สิ่งที่ชอบ: find . -iname "*php" -exec grep -H myString {} \; ฉันจะได้รับชื่อไฟล์ (พร้อมเส้นทาง) แต่ไม่มีการแข่งขันได้อย่างไร ฉันต้องใช้xargsหรือไม่ ฉันไม่เห็นวิธีการทำเช่นนี้ในgrepหน้าคนของฉัน
1068 linux  grep 

3
การจับคู่เชิงลบโดยใช้ grep (เส้นจับคู่ที่ไม่มี foo)
ฉันพยายามหาไวยากรณ์สำหรับคำสั่งนี้: grep ! error_log | find /home/foo/public_html/ -mmin -60 หรือ: grep '[^error_log]' | find /home/baumerf/public_html/ -mmin -60 error_logฉันต้องการที่จะเห็นไฟล์ทั้งหมดที่ได้รับการแก้ไขยกเว้นสำหรับผู้ที่ตั้งชื่อ ฉันเคยอ่านเกี่ยวกับที่นี่แต่พบnotรูปแบบ -regex หนึ่งรูป
990 regex  grep 

11
ฉันจะไปป์ stderr ได้อย่างไรและไม่ใช่ stdout?
ผมมีโปรแกรมที่เขียนข้อมูลไปยังstdoutและstderrและฉันต้องgrepผ่านอะไรมาเพื่อstderrขณะที่ไม่คำนึงถึงstdout แน่นอนฉันสามารถทำได้ใน 2 ขั้นตอน: command > /dev/null 2> temp.file grep 'something' temp.file แต่ฉันต้องการที่จะสามารถทำได้โดยไม่ต้องไฟล์ temp มีเทคนิคการวางท่อแบบอัจฉริยะหรือไม่?
981 bash  grep  stdout  pipe  stderr 

11
grep แต่มีนามสกุลไฟล์ที่แน่นอนเท่านั้น
ฉันกำลังทำงานกับการเขียนสคริปต์ไปยังgrepไดเรกทอรีบางอย่าง แต่ไดเรกทอรีเหล่านี้มีประเภทไฟล์ทุกประเภท ฉันต้องการgrepเพียง.hและ.cppสำหรับในตอนนี้ แต่บางทีบางคนอื่น ๆ ในอนาคต จนถึงตอนนี้ฉันมี: { grep -r -i CP_Image ~/path1/; grep -r -i CP_Image ~/path2/; grep -r -i CP_Image ~/path3/; grep -r -i CP_Image ~/path4/; grep -r -i CP_Image ~/path5/;} | mailx -s GREP email@domain.com ทุกคนสามารถแสดงให้ฉันเห็นว่าฉันจะเพิ่มเฉพาะนามสกุลไฟล์ที่เฉพาะเจาะจงได้อย่างไร

22
ใช้ grep --exclude / - รวมไวยากรณ์เพื่อไม่ grep ผ่านไฟล์บางไฟล์
ฉันกำลังมองหาสตริงfoo=ในไฟล์ข้อความในแผนผังไดเรกทอรี มันเป็นเครื่อง Linux ทั่วไปฉันมี bash shell: grep -ircl "foo=" * ในไดเรกทอรีนี้ยังมีไฟล์ไบนารีจำนวนมากที่ตรงกับ "foo =" เนื่องจากผลลัพธ์เหล่านี้ไม่เกี่ยวข้องและทำให้การค้นหาช้าลงฉันต้องการ grep ข้ามการค้นหาไฟล์เหล่านี้ (ส่วนใหญ่เป็นรูป JPEG และ PNG) ฉันจะทำอย่างไร ฉันรู้ว่ามี--exclude=PATTERNและ--include=PATTERNตัวเลือก แต่รูปแบบรูปแบบคืออะไร หน้า man ของ grep พูดว่า: --include=PATTERN Recurse in directories only searching file matching PATTERN. --exclude=PATTERN Recurse in directories skip file matching PATTERN. ค้นหาgrep include , grep include …

12
วิธีการ 'grep' สตรีมต่อเนื่อง
เป็นไปได้ไหมที่จะใช้grepในการสตรีมต่อเนื่อง? สิ่งที่ฉันหมายถึงคือการเรียงลำดับของtail -f <file>คำสั่ง แต่มีgrepในผลลัพธ์เพื่อเก็บเฉพาะบรรทัดที่ฉันสนใจ ฉันพยายามแล้วtail -f <file> | grep patternแต่ดูเหมือนว่าgrepจะสามารถดำเนินการได้เมื่อtailเสร็จสิ้นแล้วนั่นคือการพูดที่ไม่เคยทำ
729 linux  bash  shell  grep  tail 

14
grep สามารถแสดงเฉพาะคำที่ตรงกับรูปแบบการค้นหาได้หรือไม่
มีวิธีสร้าง grep เอาต์พุต "คำ" จากไฟล์ที่ตรงกับนิพจน์การค้นหาหรือไม่? หากฉันต้องการค้นหาอินสแตนซ์ทั้งหมดของพูดว่า "th" ในหลาย ๆ ไฟล์ฉันสามารถทำได้: grep "th" * แต่ผลลัพธ์จะเป็นสิ่งที่ชอบ (ตัวหนาคือโดยฉัน); บางแฟ้มข้อความ: แมวนั่งอยู่บนเสื่อ บางแบบอื่น ๆ ข้อความไฟล์: สุนัขจิ้งจอกสีน้ำตาลอย่างรวดเร็ว ยัง - ไฟล์ข้อความอื่น: ฉันหวังว่านี่จะอธิบายอย่างละเอียด สิ่งที่ฉันต้องการให้ผลลัพธ์โดยใช้การค้นหาเดียวกันคือ: the the the this thoroughly สามารถใช้ grep ได้หรือไม่ หรือใช้ชุดเครื่องมืออื่นร่วมกัน?
685 grep  words 


8
วิธี grep Git คอมมิชชันหรือเนื้อหาสำหรับคำบางคำ?
ในที่เก็บรหัส Git ฉันต้องการแสดงรายการการกระทำทั้งหมดที่มีคำที่แน่นอน ฉันลองสิ่งนี้ git log -p | grep --context=4 "word" แต่ไม่จำเป็นต้องให้ชื่อไฟล์กลับมา (ยกเว้นกรณีที่น้อยกว่า 5 บรรทัดจากคำที่ฉันค้นหาฉันยังลอง git grep "word" แต่มันให้เฉพาะไฟล์ที่ฉันนำเสนอไม่ใช่ประวัติ ฉันจะค้นหาประวัติทั้งหมดเพื่อติดตามการเปลี่ยนแปลงของคำใดคำหนึ่งได้อย่างไร ฉันต้องการค้นหา codebase ของฉันเพื่อค้นหาคำเพื่อติดตามการเปลี่ยนแปลง (ค้นหาในประวัติไฟล์)
622 git  search  grep 

14
ฉันจะใช้ grep เพื่อค้นหาคำภายในโฟลเดอร์ได้อย่างไร
ใน Windows ฉันจะทำการค้นหาคำภายในโฟลเดอร์ ในทำนองเดียวกันฉันต้องการทราบว่ามีคำที่เฉพาะเจาะจงเกิดขึ้นภายในไดเรกทอรีที่มีไดเรกทอรีย่อยและไฟล์จำนวนมากหรือไม่ การค้นหาของฉันสำหรับการแสดงไวยากรณ์ grep grep string filenameฉันต้องระบุชื่อไฟล์คือ ตอนนี้ฉันไม่รู้จักชื่อไฟล์ฉันจะทำยังไงดี? เพื่อนแนะนำให้ทำgrep -nr stringแต่ฉันไม่รู้ว่าสิ่งนี้หมายความว่าอย่างไรและฉันไม่ได้ผลลัพธ์ด้วย (ไม่มีการตอบกลับจนกว่าฉันจะออกctrl + c)


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