GNU/Linux >> Znalost Linux >  >> Linux

Použití sed k nahrazení mezi konkrétním vzorem

S GNU sed je to možné. Vyberte si jednu z těchto dvou forem na základě nenasytnosti náhrady.

sed 's|=.*,|\L&|' file
sed 's|=[^,]*,|\L&|' file

Jak je uvedeno v příručce, "\L změní nahrazení na malá písmena, dokud nebude \U nebo \E je nalezen." & je text odpovídající regulárnímu výrazu.

Upravil jsem ukázkový soubor, abych ukázal, že byste si měli moudře vybrat mezi podivínským =.*, a nenasytný =[^,]*, regulární výrazy:

$ cat file
SOMENAME=WOODSTOCK,
SOMEOTHERNAME2=JIMMY,WOODSTOCK,FINISH
$ sed 's|=.*,|\L&|' file
SOMENAME=woodstock,
SOMEOTHERNAME2=jimmy,woodstock,FINISH
$ sed 's|=[^,]*,|\L&|' file
SOMENAME=woodstock,
SOMEOTHERNAME2=jimmy,WOODSTOCK,FINISH

Na libovolném awk vyhovujícím standardu POSIX , můžete použít tolower() funkce

awk -v FS='=' 'BEGIN { OFS = FS } { $2 = tolower($2) }1 ' file

Použijte mktemp() funkci pro vytvoření dočasného souboru pro přesměrování výstupu výše uvedeného příkazu a poté přesměrování zpět pro uložení na místě. Nebo použijte GNU awk>=4.1 s -i inplace

Další varianta verze kompatibilní s POSIX, používající match() funkce by bylo udělat

awk 'match($0, /=([^,]*),/) { str = substr($0, RSTART+1, RLENGTH-2); sub(str, tolower(str)) }1'

Linux
  1. Použití sed k nalezení a nahrazení textových souborů v Linuxu

  2. Jak nahradit řetězec v souboru (souborech)?

  3. Shoda víceřádkového vzoru pomocí Sed, Awk nebo Grep?

  1. Nahradit řádek jiným obsahem pomocí Sed And Parallel pro velký soubor?

  2. Nahradit data mezi citacemi v souboru?

  3. Uložit soubor po použití příkazu Sed?

  1. Použití grep a sed k nalezení a nahrazení řetězce

  2. Odeberte konkrétní znak pomocí awk nebo sed

  3. Jak změnit soubor na místě pomocí awk? (jako u sed -i)