To może pracować dla Ciebie:
sed '/^EXTRATHING {/,/^};/c\SOMETHING{}' input_file.txt >output_file.txt
lub jeśli chcesz edytować oryginalny plik:
sed -i '/^EXTRATHING {/,/^};/c\SOMETHING{}' input_file
EDIT: jak żądany oto przykład:
cat <<! | sed '/^EXTRATHING {/,/^};/c\SOMETHING{}'
> aaa
> EXTRATHING {
> };
> bbb
> EXTRATHING {
> };
> ccc
> !
aaa
SOMETHING{}
bbb
SOMETHING{}
ccc
EDIT : Jeśli pierwszy i ostatni adres są kolejnymi liniami, użyj tego:
# cat <<\! | sed '/^EXTRATHING {/{N;s/^EXTRATHING {\n};/SOMETHING{}/}'
> aaa
> EXTRATHING {
> bbb
> };
> ccc
> EXTRATHING {
> };
> ddd
> !
aaa
EXTRATHING {
bbb
};
ccc
SOMETHING{}
ddd
Innym sposobem (być może łatwiej?):
echo -e "EXTRATHING {\n};" | sed '$!N;s/^EXTRATHING {\n};/SOMETHING {};/;P;D'
SOMETHING {};
zadbać o opublikowanie przykładu, że to działa ;-)? Właśnie otrzymałem oryginalny dokument wrócił ... Powodzenia. – shellter
Dzięki @potong. Jednak twoje polecenie usunie również oryginalny wzór, jeśli istnieją inne linie między "EXTRATHING {" i "};". Nie chcę ich zastępować.Tak więc nie należy zastępować następujących elementów "EXTRATHING {\ n something \ n};". – bbv
Dzięki, widzę twój kod działa z sed 4 *, ale nie z wersją bez wersji, którą mam w UWIN. Czy używasz wyrażenia zasięgu do przechwytywania dwóch linii? tj. '/ x /,/y /'? Powodzenia wszystkim. – shellter