Cela pourrait fonctionner pour vous:
sed '/^EXTRATHING {/,/^};/c\SOMETHING{}' input_file.txt >output_file.txt
ou si vous souhaitez modifier le fichier d'origine:
sed -i '/^EXTRATHING {/,/^};/c\SOMETHING{}' input_file
EDIT: comme demandé voici un exemple:
cat <<! | sed '/^EXTRATHING {/,/^};/c\SOMETHING{}'
> aaa
> EXTRATHING {
> };
> bbb
> EXTRATHING {
> };
> ccc
> !
aaa
SOMETHING{}
bbb
SOMETHING{}
ccc
EDIT : Si la première et la dernière adresse sont des lignes consécutives, utilisez ceci:
# cat <<\! | sed '/^EXTRATHING {/{N;s/^EXTRATHING {\n};/SOMETHING{}/}'
> aaa
> EXTRATHING {
> bbb
> };
> ccc
> EXTRATHING {
> };
> ddd
> !
aaa
EXTRATHING {
bbb
};
ccc
SOMETHING{}
ddd
Une autre façon (peut-être plus facile?):
echo -e "EXTRATHING {\n};" | sed '$!N;s/^EXTRATHING {\n};/SOMETHING {};/;P;D'
SOMETHING {};
prenez soin de signaler votre exemple que cela fonctionne ;-)? Je viens de recevoir le document original. Bonne chance. – shellter
Merci @potong. Cependant, votre commande supprimera également le motif d'origine s'il existe d'autres lignes entre "EXTRATHING {" et "};". Je ne veux pas que ceux-ci soient remplacés.Donc, ce qui suit ne devrait pas être remplacé "EXTRATHING {\ n quelquechose \ n};". – bbv
Merci, je vois que votre code fonctionne avec le sed 4 *, mais pas avec la version non-versionnée que j'ai dans UWIN. Utilisez-vous une expression de plage pour capturer les deux lignes? c'est-à-dire '/ x /,/y /'? Bonne chance à tous. – shellter