Saya punya file ini:
sometext1{
string1
}
sometext2{
string2
string3
}
sometext3{
string4
string5
string6
}
Saya ingin mencari file ini untuk string tertentu dan mencetak semuanya sebelum string ini hingga pembukaan {
dan semuanya setelah string ini hingga penutupan }
. Saya mencoba untuk mencapai ini dengan sed tetapi jika saya mencoba untuk mencetak segala sesuatu dalam kisaran /{/,/string2/
misalnya cetak sed ini:
sometext1{
string1
}
sometext2{
string2
sometext3{
string4
string5
string6
}
Jika saya mencari string "string2" saya perlu output menjadi:
sometext2{
string2
string3
}
Terima kasih.
grep -n '' <infile | sed ...
. sed
Perintah - perintah perlu dimodifikasi; khususnya bit /
alamat /
yang mencari ^
jangkar top-of-line. Jadi, jika Anda menggunakan jawaban saya Anda mungkin bisa melakukan: grep -n '' | sed 'H;/{$/h;/^[^:]*:}/x;/{\n.*PATTERN/!d'
. Semua baris output akan diawali dengan nomor baris file asli diikuti oleh titik dua seperti 1:sometext1{\n2:string1
dan seterusnya. sed
akan menyaring hanya apa yang akan disaring sebelumnya, kecuali bahwa setiap jalur output terbuka dengan angka.