Ich habe diese Datei:
sometext1{
string1
}
sometext2{
string2
string3
}
sometext3{
string4
string5
string6
}
Ich möchte diese Datei nach einer bestimmten Zeichenfolge durchsuchen und alles vor dieser Zeichenfolge bis zur Eröffnung {
und alles nach dieser Zeichenfolge bis zum Abschluss drucken }
. Ich habe versucht, dies mit sed zu erreichen, aber wenn ich versuche, alles im Bereich zu drucken, /{/,/string2/
zum Beispiel sed, druckt dies:
sometext1{
string1
}
sometext2{
string2
sometext3{
string4
string5
string6
}
Wenn ich nach der Zeichenfolge "string2" suche, muss die Ausgabe wie folgt lauten:
sometext2{
string2
string3
}
Vielen Dank.
grep -n '' <infile | sed ...
. Die sed
Befehle müssen geändert werden. speziell die /
Adressbits /
, die nach ^
Top-of-Line-Ankern suchen . Wenn Sie also meine Antwort verwenden würden, könnten Sie wahrscheinlich Folgendes tun : grep -n '' | sed 'H;/{$/h;/^[^:]*:}/x;/{\n.*PATTERN/!d'
. Allen Ausgabezeilen werden die Zeilennummern der Originaldatei vorangestellt, gefolgt von einem Doppelpunkt wie 1:sometext1{\n2:string1
usw. sed
filtert nur das, was zuvor gefiltert wurde, außer dass jede Ausgabezeile mit einer Nummer geöffnet wird.