koszotoroburFanatyk
12piorunówMagiczny jednoliniowiec BASHa wykorzystujący dwie funkcjonalności komendy GNU sed:
* Range Addresses : selecting a range of lines
* The s Command : line pattern matching and substitution
>sed '/regexp/,/regexp/ s/regexp/replacement/'
Komenda najpierw znajduje określoną sekcję pomiędzy dwoma wyrażeniami regularnymi /regexp/,/regexp/ a następnie w tej sekcji wykonuje substytucję wartości zdefiniowaną w s/regexp/replacement/.
Sprawdza się podczas modyfikowania plików konfiguracyjnych INI oraz TOML lub innych posiadających zdefiniowane sekcje, gdzie wartości w sekcjach się powtarzają (innymi słowy nie są unikalne dla całego pliku konfiguracyjnego).
Przykład gdzie wartość "xxx" zostanie zamieniano na "zzz" tylko w sekcji "[aaa]":
>echo -e '[aaa]\\nxxx\\n[bbb]\\nxxx\\n[ccc]\\nyyy' | sed '/^\\[aaa\\]/,/^\\[/ s/xxx/zzz/'
Przykład gdzie wartość "xxx" zostanie zamieniano na "zzz" tylko w sekcji "[bbb]":
>echo -e '[aaa]\\nxxx\\n[bbb]\\nxxx\\n[ccc]\\nyyy' | sed '/^\\[bbb\\]/,/^\\[/ s/xxx/zzz/'
#technologia #linux #bash #oneliner #sed
