Magiczny jednoliniowiec BASHa wykorzystujący dwie funkcjonalności komendy GNU sed:
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]":
Przykład gdzie wartość "xxx" zostanie zamieniano na "zzz" tylko w sekcji "[bbb]":
#technologia #linux #bash #oneliner #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
Zaloguj się aby komentować