ฉันต้องการตัดต่อไฟล์ แต่มีเฉพาะบรรทัดเอาต์พุตที่มีสตริงที่แน่นอน เป็นไปได้ไหม
ฉันต้องการตัดต่อไฟล์ แต่มีเฉพาะบรรทัดเอาต์พุตที่มีสตริงที่แน่นอน เป็นไปได้ไหม
คำตอบ:
ใช้ grep มันสร้างขึ้นเพื่อจุดประสงค์นั้น
หากต้องการค้นหาบรรทัดจากส่วนท้ายของ / var / log / syslog ที่มี "cron" อยู่ในบรรทัดให้เรียกใช้:
tail -f /var/log/syslog | grep cron
และเนื่องจากมันยอมรับทุกอย่างบน stdin คุณจึงสามารถใช้มันในเอาต์พุตของคำสั่งอื่น ๆ ได้เช่นกันโดยการไพพ์ในลักษณะเดียวกันกับข้างบน (ใช้สัญลักษณ์ |)
tail -f /var/log/messages | grep "myfilterword"
หวังว่าจะช่วย
ต่อไปนี้เป็นแนวคิดอื่น ๆ สองสามข้อที่แม้จะไม่ง่ายอาจมีความยืดหยุ่นเพิ่มเติมที่น่าสนใจ:
ก่อนอื่นคุณสามารถกรองด้วย awk แทน grep:
tail -f /var/log/messages | awk '/myfilterword/'
grep
ว่างานตรงเช่นเดียวกับตัวอย่างการใช้ คุณสามารถขยายสิ่งนี้โดยใช้พลังของ awk ตัวอย่างเช่น:
tail -f /var/log/messages | \
awk '/myfilterword/ { for (i=6; i<=NF; i++) printf("%s ", $i); printf("\n")}'
ซึ่งจะพิมพ์ลำดับที่ 6 ถึงฟิลด์สุดท้ายของเอาต์พุต (ฟิลด์ถูกคั่นด้วยช่องว่าง)
อีกแนวคิดที่คล้ายกันคือใช้ perl one-liner:
tail -f /var/log/messages | perl -ne "/myfilterword/ and print"
grep
ที่ทำงานเหมือนกัน บางทีคุณอาจต้องการตัวนับหมายเลขบรรทัดและเพียงฟิลด์ที่ 6? เกี่ยวกับสิ่งนี้:
tail -f /var/log/messages | \
perl -lane "/myfilterword/ and printf \"%6d %s\n\",++\$a,\$F[6]"
เห็นได้ชัดว่าสิ่งต่าง ๆ เหล่านี้สามารถทำได้ด้วยเครื่องมืออื่น ๆ เช่นกัน แต่ฉันต้องการแสดงให้เห็นว่ามีวิธีสนุก ๆ ในการใช้ภาษาที่มีวัตถุประสงค์ทั่วไปเช่น awk หรือ perl ที่นี่
เคล็ดลับอีกอย่างหนึ่งที่ควรระวังหากคุณมีไฟล์ CSV ที่มีส่วนหัวที่คุณไม่ต้องการเช่น
% cat data.txt
fruit dessert calories
Apple Pie 770
Banana Pudding 625
Cherry Cobbler 990
% tail -n +2 data.txt
Apple Pie 770
Banana Pudding 625
Cherry Cobbler 990
ไม่สำคัญว่าอินพุตจะtail
อยู่นานเท่าไรข้อมูล+n -2
จะละเว้นบรรทัดแรก
grep
จะบัฟเฟอร์เมื่อมีการใช้แบบไม่โต้ตอบเช่นเมื่อมันเป็นส่วนหนึ่งของไปป์ไลน์ที่ยาวขึ้น GNU grep 2.5.1 เสนอ--line-buffered
ตัวเลือกในการแก้ไขปัญหานี้เมื่อกำจัด grep จากไพพ์ไลน์ไม่ใช่ตัวเลือก (เมื่อฉันพูด grep จะbufferฉันหมายความว่าคุณจะไม่เห็นการส่งออกจนกว่าบัฟเฟอร์ได้ถึงสิ่งที่ต้องการ 4k.)