ฉันมีไฟล์นี้:
sometext1{
string1
}
sometext2{
string2
string3
}
sometext3{
string4
string5
string6
}
ฉันต้องการที่จะค้นหาแฟ้มนี้เพื่อหาสตริงที่เฉพาะเจาะจงและพิมพ์ทุกอย่างก่อนที่สายนี้ขึ้นอยู่กับการเปิดและทุกอย่างหลังจากที่สายนี้ถึงปิด{
}
ฉันพยายามที่จะบรรลุสิ่งนี้ด้วย sed แต่ถ้าฉันพยายามพิมพ์ทุกอย่างในช่วง/{/,/string2/
ตัวอย่างเช่น sed พิมพ์สิ่งนี้:
sometext1{
string1
}
sometext2{
string2
sometext3{
string4
string5
string6
}
ถ้าฉันค้นหาสตริง "string2" ฉันต้องการผลลัพธ์เป็น:
sometext2{
string2
string3
}
ขอบคุณ
grep -n '' <infile | sed ...
แต่มันจะทำดีที่สุดเช่น sed
คำสั่งจะต้องแก้ไข; บิต/
แอดเดรสโดยเฉพาะ/
ที่มองหา^
จุดยึดด้านบนของบรรทัด grep -n '' | sed 'H;/{$/h;/^[^:]*:}/x;/{\n.*PATTERN/!d'
ดังนั้นถ้าคุณกำลังใช้คำตอบของฉันคุณอาจจะทำ: บรรทัดเอาต์พุตทั้งหมดจะนำหน้าด้วยหมายเลขบรรทัดของไฟล์ดั้งเดิมตามด้วยโคลอนที่ชอบ1:sometext1{\n2:string1
เป็นต้น sed
จะกรองเฉพาะสิ่งที่จะกรองก่อนยกเว้นว่าแต่ละบรรทัดเอาต์พุตจะเปิดขึ้นพร้อมกับตัวเลข