J'ai ce fichier:
sometext1{
string1
}
sometext2{
string2
string3
}
sometext3{
string4
string5
string6
}
Je veux rechercher dans ce fichier une chaîne spécifique et tout imprimer avant cette chaîne jusqu'à l'ouverture {
et tout après cette chaîne jusqu'à la fermeture }
. J'ai essayé d'y parvenir avec sed mais si j'essaie d'imprimer tout dans la gamme /{/,/string2/
par exemple sed imprime ceci:
sometext1{
string1
}
sometext2{
string2
sometext3{
string4
string5
string6
}
Si je recherche la chaîne "string2", j'ai besoin que la sortie soit:
sometext2{
string2
string3
}
Merci.
grep -n '' <infile | sed ...
. Les sed
commandes devront être modifiées; en particulier les bits d' /
adresse /
qui recherchent ^
des ancres haut de gamme. Donc, si vous utilisiez ma réponse que vous pourriez probablement faire: grep -n '' | sed 'H;/{$/h;/^[^:]*:}/x;/{\n.*PATTERN/!d'
. Toutes les lignes de sortie seront préfixées avec les numéros de ligne du fichier d'origine suivis de deux points comme 1:sometext1{\n2:string1
et ainsi de suite. sed
filtrera uniquement ce qu'il filtrerait auparavant, sauf que chaque ligne de sortie s'ouvre avec un numéro.