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

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

4
ทำไม grep ไม่ใช้ท่อถึงทำงานที่นี่?
ฉันมีคำสั่งดังต่อไปนี้: find / -name libGL.so.1 ซึ่งส่งคืนบรรทัดจำนวนมากด้วย "การอนุญาตที่ถูกปฏิเสธ" ฉันต้องการยกเว้นบรรทัดดังกล่าวดังนั้นฉันจึงเพิ่มสิ่งต่อไปนี้: find / -name libGL.so.1 | grep -v 'denied' แต่ผลลัพธ์คือเดียวกัน - ฉันไม่ได้กรองบรรทัดที่มีgrep -v 'denied' Permission deniedฉันลองหลายรูปแบบดูบทเรียน grep แต่ฉันไม่สามารถเข้าใจปัญหาได้ ข้อเสนอแนะใด ๆ
18 shell  grep  pipe 

1
ค้นหา grep + บรรทัดถัดไป
ด้วยgrepคำสั่งฉันพบข้อความที่ฉันต้องการดังนี้: grep 'C02' ~/temp/log.txt ตอนนี้ที่ใดก็ตามที่ฉันค้นหาสตริงที่ต้องการฉันต้องการพิมพ์บรรทัดตามสตริงที่พบ ตัวอย่างเช่นสมมติว่าข้อความที่ต้องการคือ 'abc' และ abc พบได้ที่บรรทัดที่ 12 ฉันต้องการพิมพ์บรรทัดที่ 13 ด้วย
18 grep 

1
ควรใช้ grep, less, awk, sed เมื่อไหร่
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ฉันเข้าสู่โลกของ Linux และที่ทำงานฉันใช้grepมากขึ้นเรื่อย ๆ ด้วยการทำเช่นนั้นฉันก็พบว่าบางครั้งมันก็ไม่เพียงพอสำหรับสิ่งที่ฉันต้องการ ฉันกำลังต่อสู้กับไม่กี่วันที่ผ่านมาและเพื่อนร่วมงานของฉันที่เป็นลินุกซ์ผู้ดูแลระบบอาวุโสบอกให้ผมใช้grep awkฉันตกตะลึงด้วยความเร็วที่ฉันได้รับ ดังนั้นคำถามของฉันคือเมื่อไหร่ที่คุณเลือกที่จะใช้อีกอันหนึ่ง? คำถามอะไรที่ฉันสามารถถามตัวเองก่อนที่จะทำงานด้วยgrepและใช้เวลามากเมื่อฉันสามารถทำได้ด้วยawkและประหยัดเวลา?
17 awk  sed  grep  less 

1
วิธีการ“ grep” สำหรับความยาวบรรทัด * ไม่ใช่ * ในช่วงที่กำหนด
หมายเหตุ:คำถามนี้เป็นส่วนเติมเต็มของคำถาม & คำตอบนี้: "grep" สำหรับความยาวบรรทัดในช่วงที่กำหนดได้อย่างไร เราจะ grep สำหรับบรรทัดที่มีน้อยกว่า 8 หรือมากกว่า 63 ตัวอักษรได้อย่างไรไม่มีที่มีมากกว่าแปดและน้อยกว่า 63 ตัว? ดังนั้นการนับจำนวนอักขระที่ยอมรับได้อาจเป็น ... 7 6 5 4 3 2 1 0 ...และ... 64 65 66 67 ...

1
ลบบรรทัดที่ค่าของฟิลด์น้อยกว่าหรือเท่ากับ 3 - sed หรือ awk?
ฉันต้องการลบทุกบรรทัดที่มีค่า 2 หรือน้อยกว่าในฟิลด์ที่ 8 (คอลัมน์) ข้อมูลของฉันมีลักษณะเช่นนี้: 12-31 Airport 189 379 41 49.70946503 -124.91377258 2 2880 30.8 01-01 AlberniElementary 165 331 16 49.26100922 -124.80662537 4 5760 26.1 01-09 BamfieldMarine 161 323 23 48.83490372 -125.13572693 2 2875 27.4 01-10 BamfieldMarine 161 323 23 48.83490372 -125.13572693 3 3068 38.6 ฉันเข้าใจว่าการใช้ awk ฉันสามารถตัดค่าที่ต้องการและพิมพ์ไปยังไฟล์อื่นและฉันเข้าใจว่า sed …
17 shell  shell-script  sed  awk  grep 

4
ฉันจะ grep โดยไม่มีช่องว่างนำหน้าได้อย่างไร
ฉันกำลัง greping ผ่าน codebase ขนาดใหญ่และ whitespaces และ tabulation ชั้นนำดูเหมือนจะค่อนข้างน่ารำคาญ มีวิธีใดที่จะกำจัดมันได้หรือไม่? grep -R "something" ./ เช่นแทนที่จะเป็น: foo/bar.cpp: qwertyuiosomethingoi foo/bar/baz.h: 43rfsgsomethingdrfg bar/bar.cpp: 1234edwssomethingczd ฉันต้องการได้รับ: foo/bar.cpp: qwertyuiosomethingoi foo/bar/baz.h: 43rfsgdsomethingrfg bar/bar.cpp: 1234edwssomethingczd หรือดีกว่า: foo/bar.cpp: qwertyuisomethingooi foo/bar/baz.h: 43rfsgdrsomethingfg bar/bar.cpp: 1234edwssomethingczd

4
ค้นหาไฟล์ที่มีสตริงในชื่อไฟล์และสตริงอื่นภายในไฟล์หรือไม่
ฉันต้องการ (เรียกซ้ำ) ค้นหาไฟล์ทั้งหมดที่มี "ABC" ในชื่อไฟล์ซึ่งมี "XYZ" ในไฟล์ด้วย ฉันเหนื่อย: find . -name "*ABC*" | grep -R 'XYZ' แต่มันไม่ได้ให้ผลลัพธ์ที่ถูกต้อง
17 grep  find 

7
ฉันจะเปิดไฟล์ที่เป็นผลมาจาก grep ได้อย่างไร
ฉันมักจะ grep มัดไฟล์เพื่อค้นหาบรรทัดแล้ว grep ส่งคืนหนึ่งผลลัพธ์ แทนที่จะคัดลอกและวางชื่อไฟล์ลงในคำสั่งใหม่ฉันต้องการที่จะสามารถเปิดผลลัพธ์นั้นด้วยเครื่องมือแก้ไข grep foo | vimสิ่งที่ชอบ: มีวิธีทำใน BASH หรือไม่?
17 bash  grep 

5
ใช้ grep vs awk
เพื่อจับภาพรูปแบบเฉพาะawkและgrepสามารถนำมาใช้ ทำไมเราควรใช้อันอื่น เร็วกว่าไหนและเพราะอะไร ถ้าฉันมีล็อกไฟล์และฉันต้องการคว้ารูปแบบบางอย่างฉันสามารถทำอย่างใดอย่างหนึ่งต่อไปนี้ awk '/pattern/' /var/log/messages หรือ grep 'pattern' /var/log/messages ฉันยังไม่ได้ทำการเปรียบเทียบดังนั้นฉันไม่รู้เลย ใครบางคนสามารถอธิบายรายละเอียดนี้ เป็นเรื่องดีที่ได้ทราบการทำงานภายในของเครื่องมือทั้งสองนี้
17 linux  awk  grep  performance 

4
คำนำหน้าและสตริงต่อท้ายไปยังแต่ละบรรทัดออกจากคำสั่ง
ฉันพบปัญหาขณะพยายามเขียนสคริปต์ Bash เมื่อgrepผลลัพธ์มันจะส่งคืน (ปกติ) หลายบรรทัด ฉันต้องการคำนำหน้าและต่อท้ายสตริงกับแต่ละบรรทัดเอาต์พุตเหล่านี้ ฉันยังต้องการที่จะทราบว่าฉันท่อlsเข้าgrepเช่น: ls | grep


8
ฉันจะนับจำนวนครั้งที่ลำดับไบต์เกิดขึ้นในไฟล์ได้อย่างไร
ฉันต้องการนับกี่ครั้งที่ลำดับของไบต์เกิดขึ้นภายในไฟล์ที่ฉันมี ตัวอย่างเช่นฉันต้องการค้นหาจำนวนครั้งที่\0xdeadbeefเกิดขึ้นภายในไฟล์ที่ปฏิบัติการได้ ตอนนี้ฉันกำลังใช้ grep: #/usr/bin/fish grep -c \Xef\Xbe\Xad\Xde my_executable_file (ไบต์ถูกเขียนในลำดับย้อนกลับเนื่องจาก CPU ของฉันเป็น endian น้อย) อย่างไรก็ตามฉันมีปัญหาสองประการเกี่ยวกับวิธีการของฉัน: \Xnnลำดับการหลบหนีเหล่านั้นใช้ได้เฉพาะในเปลือกปลาเท่านั้น grep กำลังนับจำนวนบรรทัดที่มีหมายเลขเวทย์มนตร์ของฉัน หากรูปแบบเกิดขึ้นสองครั้งในบรรทัดเดียวกันมันจะนับเพียงครั้งเดียว มีวิธีแก้ไขปัญหาเหล่านี้หรือไม่? ฉันจะทำให้หนึ่งซับนี้ทำงานในเปลือก Bash และนับจำนวนครั้งอย่างถูกต้องรูปแบบที่เกิดขึ้นภายในไฟล์ได้อย่างไร

1
agrep พร้อมการลงโทษแบบอคติ
ฉันกำลังใช้tre-agrep (manpage) , การนำไปใช้agrep (manpage)เพื่อดำเนินการจับคู่รูปแบบโดยประมาณ ยูทิลิตี้นี้ค้นหาการจับคู่ตามระยะทางของ Levenshteinและผู้ใช้สามารถกำหนดค่าการลงโทษที่ใช้สำหรับการทดแทนการแทรกหรือการแก้ไขการลบ อย่างไรก็ตามฉันต้องการใช้น้ำหนักที่แตกต่างกันไปตามความยาวของข้อความค้นหานั่นคือมีน้ำหนักที่ต่ำกว่าสำหรับการลบที่จุดเริ่มต้น (ซ้ายสุด) ของข้อความค้นหามากกว่าด้านขวา manหน้ายูทิลิตี้นี้ไม่ได้แสดงให้เห็นว่าระดับการควบคุมดังกล่าวเป็นไปได้ มีเครื่องมือบรรทัดคำสั่งอื่น ๆ ที่การจับคู่โดยประมาณกับการควบคุมที่ดีกว่าสำหรับบทลงโทษที่ไม่ตรงกันเป็นไปได้หรือไม่?
16 grep  agrep 

2
พิมพ์บรรทัดระหว่าง (และรวมถึง) สองรูปแบบ
ฉันต้องการเริ่ม grepping จากบรรทัดที่มีCKที่ส่วนท้ายของบรรทัดและหยุดการ grepping เมื่อบรรทัดมีDที่สิ้นสุด ฉันพยายามgrep "$CK" "$D" file..txtแต่มันใช้งานไม่ได้ การป้อนข้อมูล: kkkkkkkkkkk jjjjjjjjjjjjjjjjjj gggggggggggg/CK JHGHHHHHHHH HJKHKKLKLLL JNBHBHJKJJLKKL JLKKKLLKJLKJ/D GGGGGGGGGGGGGG GGGGGGGGGGGGGG ผลลัพธ์ที่ต้องการ: gggggggggggg/CK JHGHHHHHHHH HJKHKKLKLLL JNBHBHJKJJLKKL JLKKKLLKJLKJ/D

2
grep: แสดงชื่อไฟล์หนึ่งครั้งจากนั้นแสดงบริบทด้วยหมายเลขบรรทัด
ซอร์สโค้ดของเรามีรหัสข้อผิดพลาดกระจายอยู่ทั่วไป การค้นหามันเป็นเรื่องง่ายด้วย grep แต่ฉันต้องการฟังก์ชั่นทุบตีfind_codeที่ฉันสามารถดำเนินการ (เช่น. find_code ####) ซึ่งจะให้ผลลัพธ์ตามบรรทัดเหล่านี้: /home/user/path/to/source.c 85 imagine this is code 86 this is more code 87 { 88 nicely indented 89 errorCode = 1111 90 that's the line that matched! 91 ok this block is ending 92 } 93 } นี่คือสิ่งที่ฉันมีในปัจจุบัน: find_code() { # "= " …

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