Bu dosya var:
sometext1{
string1
}
sometext2{
string2
string3
}
sometext3{
string4
string5
string6
}
Belirli bir dize için bu dosyayı aramak ve açılıştan önce bu dizeden önce {
ve kapanışa kadar bu dizeden sonra her şeyi yazdırmak istiyorum }
. Sed ile bunu başarmaya çalıştım ama /{/,/string2/
örneğin sed'deki her şeyi yazdırmaya çalışırsam sed yazdırır:
sometext1{
string1
}
sometext2{
string2
sometext3{
string4
string5
string6
}
Dize "string2" için arama yaparsanız çıktı olması gerekir:
sometext2{
string2
string3
}
Teşekkürler.
grep -n '' <infile | sed ...
. sed
Komutlar modifiye edici gerekecektir; özellikle satır başı bağlantılarını arayan /
adres /
bitleri ^
. Benim cevap kullanıyormuş Yani, muhtemelen yapabileceği: grep -n '' | sed 'H;/{$/h;/^[^:]*:}/x;/{\n.*PATTERN/!d'
. Tüm çıktı satırlarının önüne orijinal dosyanın satır numaraları ve ardından iki nokta üst üste 1:sometext1{\n2:string1
vb. Gelir . sed
her çıkış satırının bir sayı ile açılması dışında yalnızca daha önce filtreleyeceği şeye filtre uygular.