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'