Hejto.pl
Dodaj post

Wpisz coś do wyszukania (minimum 2 znaki)

#oneliner

Fanatyk

w LINUX

12piorunów

Magiczny 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/'