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

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

4
ใช้ sed / awk เพื่อลบอะไรหลังจากช่องว่างแรก
aaaaaaaa 09 bbbbbbbb 90 ccccccccccccccc 89 ddddd 09 ใช้ sed / awk / replace ในข้อความด้านบนฉันต้องการลบสิ่งที่เกิดขึ้นหลังจากช่องว่างแรกในแต่ละบรรทัด ตัวอย่างเช่นผลลัพธ์จะเป็น: aaaaaaaa bbbbbbbb ccccccccccccccc ddddd ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม.
20 sed  grep  awk 

3
grep ไม่ส่งออกจนกว่า EOF หากส่งผ่าน cat
รับตัวอย่างที่น้อยที่สุดนี้ ( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) มันจะออกผลลัพธ์LINE 1และแล้วหลังจากที่สองเอาท์พุทLINE 2, คาดว่าเป็น ถ้าเราไปป์นี้ให้ได้ grep LINE ( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | grep LINE พฤติกรรมจะเหมือนกับในกรณีก่อนหน้าตามที่คาดไว้ หากอีกวิธีหนึ่งเราจะทำสิ่งนี้เพื่อ cat ( echo "LINE 1" ; sleep 1 ; echo "LINE …
19 bash  grep  pipe 

2
grep ทำอย่างไรเมื่อไม่ได้ใช้งาน CPU
เมื่อมองหาการจับคู่กับgrepฉันมักจะพบว่าการค้นหาที่ตามมาใช้เวลาน้อยกว่าครั้งแรกอย่างมาก - เช่น 25s กับ 2s เห็นได้ชัดว่าไม่ใช่การใช้โครงสร้างข้อมูลซ้ำจากการเรียกใช้ครั้งล่าสุด - สิ่งที่ควรได้รับการจัดสรรคืน ใช้timeคำสั่งgrepฉันสังเกตเห็นปรากฏการณ์ที่น่าสนใจ: real 24m36.561s user 1m20.080s sys 0m7.230s เวลาที่เหลือไปที่ไหน มีอะไรที่ฉันสามารถทำได้เพื่อให้มันวิ่งเร็วทุกครั้งหรือไม่? (เช่นมีกระบวนการอื่นอ่านไฟล์ก่อนgrepค้นหา)
19 grep  performance 

2
Grep: ผลลัพธ์ที่ไม่คาดคิดเมื่อค้นหาคำในหัวข้อจากหน้าคน
ฉันพบพฤติกรรมแปลก ๆ เมื่อพยายาม grep man page ใน macOS ตัวอย่างเช่นหน้า Bash man มีการเกิดขึ้นของสตริงอย่างชัดเจนNAME: $ man bash | head -5 | tail -1 NAME และถ้าฉัน grep สำหรับnameฉันจะได้รับผลลัพธ์ แต่ถ้าฉัน grep สำหรับNAMEฉันไม่ได้: $ man bash | grep 'NAME' $ man bash | grep NAME ฉันลองคำอื่น ๆ ที่ฉันรู้ว่ามีอยู่แล้วและค้นหาสิ่งที่ให้SHELLผลตอบแทนในขณะที่ค้นหาBASHผลลัพธ์ เกิดอะไรขึ้นที่นี่? ปรับปรุง : ขอบคุณสำหรับคำตอบทั้งหมด! ฉันคิดว่ามันคุ้มค่าที่จะเพิ่มบริบทที่ฉันพบเจอ ฉันต้องการเขียนฟังก์ชัน bash …

5
grep พร้อมตัวดำเนินการเชิงตรรกะ
มียูทิลิตี grep คล้ายหรือไม่ซึ่งจะทำให้ฉันสามารถค้นหา grep ด้วยตัวดำเนินการทางตรรกะได้ ฉันต้องการที่จะสามารถซ้อนและรวมโครงสร้างเชิงตรรกะได้อย่างอิสระ ตัวอย่างเช่นสิ่งนี้ควรเป็นไปได้: grep (term1 && term2) || (term1 && (term3 xor term4)) * ฉันรู้ว่าสิ่งนี้สามารถทำได้ด้วยวานิลลา grep และการเขียนสคริปต์ทุบตีเพิ่มเติม แต่เป้าหมายของฉันที่นี่คือหลีกเลี่ยงการทำเช่นนั้น
19 grep 

5
เหตุใด $ anchor สุดท้ายของบรรทัดจึงไม่ทำงานกับคำสั่ง grep ถึงแม้ว่า front-of-line ^ anchor จะเป็นอย่างไร
ใหม่มากสำหรับ UNIX แต่ไม่ใหม่สำหรับการเขียนโปรแกรม การใช้ Terminal บน MacBook เพื่อวัตถุประสงค์ในการจัดการและค้นหารายการคำสำหรับการสร้างคำไขว้ฉันพยายามใช้ประโยชน์จากคำสั่ง Grep และรูปแบบที่หลากหลาย ดูเหมือนจะตรงไปตรงมา แต่การวางสายก่อนกับสิ่งที่ฉันคิดว่าควรเป็นกรณีที่ง่าย เมื่อฉันเข้า grep "^COW" masternospaces.txt ฉันได้สิ่งที่ต้องการ: รายการคำทั้งหมดที่เริ่มต้นด้วย COW แต่เมื่อฉันเข้า grep "COW$" masternospaces.txt ฉันคาดหวังว่าจะได้รับรายการคำที่ลงท้ายด้วย COW (มีคำพูดมากมาย) และไม่มีอะไรคืนเลย ไฟล์เป็นไฟล์ข้อความธรรมดาโดยมีทุกบรรทัดเพียงแค่คำ (หรือวลีคำศัพท์ที่ไม่มีช่องว่าง) ในตัวพิมพ์ใหญ่ทั้งหมด มีความคิดอะไรที่จะเกิดขึ้นที่นี่?
19 grep  newlines 


3
ยกเว้นไฟล์ที่มีบรรทัดข้อความที่ยาวมากจากเอาต์พุต grep
ฉันมักจะรันคำสั่ง grep เพื่อค้นหาสิ่งต่าง ๆ ในรหัสของฉัน แต่ปัญหาเกี่ยวกับโปรเจ็กต์ทางเว็บคือมักจะมีไฟล์ JavaScript และ CSS ที่บีบอัดซึ่งสร้างข้อความขนาดใหญ่หนึ่งบรรทัดดังนั้นหากพบคู่ที่ตรงกันหน้าต่างเทอร์มินัลทั้งหมดคือ เต็มไปมากกว่า 1,000 บรรทัดทำให้ไม่สามารถค้นหาสิ่งที่ฉันกำลังมองหาได้ ดังนั้นมีวิธีหลีกเลี่ยงไฟล์ที่พูดข้อความบรรทัดเดียวมากกว่า 200 ตัวอักษรหรือไม่
18 grep 

11
Grep จำนวนมากของรูปแบบจากไฟล์ขนาดใหญ่
ฉันมีไฟล์ที่เติบโตประมาณ 200,000 บรรทัดต่อวันและมันถูกสร้างขึ้นด้วยบล็อกสามบรรทัดเช่น: 1358726575123 # key Joseph Muller # name carpenter # job 9973834728345 Andres Smith student 7836472098652 Mariah Anthony dentist ตอนนี้ผมมีไฟล์อื่นจากที่ผมดึงประมาณ 10,000 1358726575123รูปแบบที่สำคัญเช่น จากนั้นฉันเรียกใช้forลูปที่มีรูปแบบเหล่านี้และต้องตรวจสอบกับไฟล์แรก หากไฟล์ไม่มีรูปแบบดังกล่าวฉันบันทึกรูปแบบในไฟล์ที่สามเพื่อการประมวลผลเพิ่มเติม: for number in $(grep -o '[0-9]\{12\}' file2); do # finds about 10.000 keys if ! grep -q ^$number$ file1; then # file1 is a …
18 grep  awk  database  text 


4
ส่งออกไปยัง stdout และในเวลาเดียวกัน grep เป็นไฟล์
stdoutฉันมีสคริปต์ที่ข้อความขาออกไป ฉันต้องการที่จะเห็นผลลัพธ์ทั้งหมดนี้ใน terminal ของฉันและในเวลาเดียวกันฉันต้องการที่จะกรองบางบรรทัดและบันทึกไว้ในไฟล์ ตัวอย่าง: $ myscript Line A Line B Line C $ myscript | grep -P 'A|C' > out.file $ cat out.file Line A Line C ฉันต้องการเห็นเอาต์พุตของคำสั่งแรกในเทอร์มินัลและบันทึกผลลัพธ์ของคำสั่งที่สองในไฟล์ ในเวลาเดียวกัน. ฉันพยายามใช้teeแต่ไม่มีผลกับหรือดีกว่ามีผลตรงกันข้าม
18 grep  pipe  stdout  tee 

5
รวมสองรายการในขณะที่ลบรายการที่ซ้ำกัน
ฉันมีระบบลินุกซ์ในตัวโดยใช้ Busybox (OpenWRT) - ดังนั้นคำสั่งจะถูก จำกัด ฉันมีสองไฟล์ที่มีลักษณะดังนี้: ไฟล์แรก aaaaaa bbbbbb cccccc mmmmmm nnnnnn ไฟล์ที่สอง mmmmmm nnnnnn yyyyyy zzzzzz ฉันต้องการรวม 2 รายการเหล่านี้เป็น 1 ไฟล์และลบรายการที่ซ้ำกัน ผมไม่ได้มีความแตกต่าง (พื้นที่ จำกัด ) เราจึงได้รับการใช้งานที่ดีawk, sedและgrep(หรือเครื่องมืออื่น ๆ ที่อาจจะรวมอยู่ในอินสแตนซ์ Busybox มาตรฐาน) ไปที่ไฟล์ผสานเช่น: command1 > mylist.merge command2 mylist.merge > originallist ไม่เป็นไร มันไม่จำเป็นต้องเป็นคำสั่งบรรทัดเดียว ฟังก์ชั่นที่กำหนดไว้ในปัจจุบันในกรณีของ Busybox ที่ฉันใช้ (ค่าเริ่มต้น OpenWRT): [, [, …
18 bash  grep  sed  awk  busybox 

3
ท่อพบใน grep -v
ฉันพยายามค้นหาไฟล์ทั้งหมดที่เป็นประเภทที่แน่นอนและไม่มีสตริงที่แน่นอน ฉันพยายามที่จะไปเกี่ยวกับมันโดยท่อค้นหาเพื่อ grep -v ตัวอย่าง: find -type f -name '*.java' | xargs grep -v "something something" ดูเหมือนจะใช้งานไม่ได้ ดูเหมือนว่าจะส่งคืนไฟล์ทั้งหมดที่พบคำสั่ง สิ่งที่ฉันพยายามจะทำคือค้นหาไฟล์. java ทั้งหมดที่ตรงกับชื่อไฟล์ที่แน่นอน (เช่นลงท้ายด้วย 'Pb' ใน SessionPb.java) และไม่มี 'ขยาย SomethingSomething "ข้างใน ความสงสัยของฉันคือการที่ฉันทำผิด ดังนั้นคำสั่งควรมีลักษณะอย่างไรแทน
18 grep  find  pipe 

1
ตรงกันข้ามกับ "grep" คืออะไร?
สมมติว่าฉันกำลังพิมพ์ชุดของสตริงที่ยาวและแทนที่จะแสดงเฉพาะบรรทัดที่มีรูปแบบที่แน่นอน (อันไหนที่ใช้ "grep" เพื่อทำ) ฉันจะกรองรูปแบบที่แน่นอนได้อย่างไร
18 grep 

2
รายการของหน่วยที่เลือกได้สำหรับ journalctl
ในเซิร์ฟเวอร์ CentOS 7 ฉันต้องการรับรายการหน่วยที่สามารถเลือกได้ซึ่งjournalctlสามารถสร้างบันทึกได้ ฉันจะเปลี่ยนรหัสต่อไปนี้เพื่อทำสิ่งนี้ได้อย่างไร journalctl --output=json-pretty | grep -f UNIT | sort -u ในเทอร์มินัล CentOS 7 โค้ดด้านบนจะสร้างgrep: UNIT: No such file or directoryขึ้น แก้ไข: โปรแกรม Java ต่อไปนี้ถูกยกเลิกโดยไม่ต้องพิมพ์ผลลัพธ์ใด ๆ จาก grep ที่ต้องการ ฉันจะเปลี่ยนสิ่งต่าง ๆ เพื่อให้โปรแกรมจาวาทำงานได้นอกเหนือจากรุ่นเทอร์มินัลได้อย่างไร String s; Process p; String[] cmd = {"journalctl --output=json-pretty ","grep UNIT ","sort -u"}; try { …
18 grep  systemd 

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