สมมติว่าคุณต้องการจับคู่ทั้งบรรทัดกับรูปแบบของคุณกับ GNU sed
นี่ใช้งานได้:
sed -n '/^dog 123 4335$/ { :a; n; p; ba; }' infile
เทียบเท่ามาตรฐาน:
sed -ne '/^dog 123 4335$/{:a' -e 'n;p;ba' -e '}' infile
ด้วยอินพุตต่อไปนี้ ( infile
):
cat 13123 23424
deer 2131 213132
bear 2313 21313
dog 123 4335
cat 13123 23424
deer 2131 213132
bear 2313 21313
ผลลัพธ์คือ:
cat 13123 23424
deer 2131 213132
bear 2313 21313
คำอธิบาย:
/^dog 123 4335$/
ค้นหารูปแบบที่ต้องการ
:a; n; p; ba;
เป็นห่วงว่าจะเรียกบรรทัดใหม่จากการป้อนข้อมูล ( n
), พิมพ์มัน ( p
) :a; ...; ba;
และสาขากลับไปฉลาก
ปรับปรุง
ต่อไปนี้เป็นคำตอบที่ใกล้เคียงกับความต้องการของคุณเช่นรูปแบบใน file2 การ grepping จาก file1:
tail -n +$(( 1 + $(grep -m1 -n -f file2 file1 | cut -d: -f1) )) file1
grep แบบฝังและตัดค้นหาบรรทัดแรกที่มีรูปแบบจาก file2 หมายเลขบรรทัดนี้บวกหนึ่งจะถูกส่งต่อไปยังส่วนท้ายส่วนอีกอันอยู่ที่นั่นเพื่อข้ามบรรทัดที่มีรูปแบบ
หากคุณต้องการเริ่มต้นจากการแข่งขันครั้งสุดท้ายแทนที่จะเป็นนัดแรกมันจะเป็น:
tail -n +$(( 1 + $(grep -n -f file2 file1 | tail -n1 | cut -d: -f1) )) file1
โปรดทราบว่าไม่ใช่ทุกรุ่นของหางสนับสนุนเครื่องหมายบวก