Questo potrebbe funzionare per voi:
sed '/^EXTRATHING {/,/^};/c\SOMETHING{}' input_file.txt >output_file.txt
o se si desidera modificare il file originale:
sed -i '/^EXTRATHING {/,/^};/c\SOMETHING{}' input_file
EDIT: come richiesto ecco un esempio:
cat <<! | sed '/^EXTRATHING {/,/^};/c\SOMETHING{}'
> aaa
> EXTRATHING {
> };
> bbb
> EXTRATHING {
> };
> ccc
> !
aaa
SOMETHING{}
bbb
SOMETHING{}
ccc
EDIT : Se il primo e l'ultimo indirizzo sono linee consecutive, utilizzare questo:
# cat <<\! | sed '/^EXTRATHING {/{N;s/^EXTRATHING {\n};/SOMETHING{}/}'
> aaa
> EXTRATHING {
> bbb
> };
> ccc
> EXTRATHING {
> };
> ddd
> !
aaa
EXTRATHING {
bbb
};
ccc
SOMETHING{}
ddd
Un altro modo (forse più facile?):
echo -e "EXTRATHING {\n};" | sed '$!N;s/^EXTRATHING {\n};/SOMETHING {};/;P;D'
SOMETHING {};
cura di inviare il vostro esempio che questo funziona ;-)? Ho appena ricevuto il documento originale restituito .. Buona fortuna. – shellter
Grazie @potong. Tuttavia, il comando sarà anche rimuovere il modello originale, se ci sono alcune altre linee tra "EXTRATHING {" e "};". Non voglio che vengano sostituiti.Quindi, il seguente non dovrebbe essere sostituito "EXTRATHING {\ n something \ n};". – bbv
Grazie, vedo il tuo codice funziona con il sed 4 *, ma non con la versione non versione che ho in UWIN. Stai usando un'espressione di intervallo per catturare le due linee? cioè '/ x /,/y /'? Buona fortuna a tutti. – shellter