Magiczny jednoliniowiec BASHa wykorzystujący dwie funkcjonalności komendy GNU sed:


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
17845825-86de-4f9e-b271-0adee16a784f

Zaloguj się aby komentować