È possibile con GNU sed. Scegli una di queste due forme in base all'ingordigia del sostituto.
sed 's|=.*,|\L&|' file
sed 's|=[^,]*,|\L&|' file
Come afferma il manuale, "\L
trasforma la sostituzione in minuscolo fino a un \U
o \E
viene trovato". &
è il testo corrispondente alla regex.
Ho modificato il file di esempio per mostrare che dovresti saggiamente scegliere tra il geniale =.*,
e il non avido =[^,]*,
espressioni regolari:
$ 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
Su qualsiasi awk
conforme a POSIX , puoi utilizzare il tolower()
funzione
awk -v FS='=' 'BEGIN { OFS = FS } { $2 = tolower($2) }1 ' file
Usa mktemp()
funzione per creare un file temporaneo per reindirizzare l'output del comando precedente e quindi reindirizzare nuovamente per salvare sul posto. Oppure usa GNU awk
>=4.1 con -i inplace
Un'altra variante della versione conforme a POSIX, che utilizza match()
funzione sarebbe fare
awk 'match($0, /=([^,]*),/) { str = substr($0, RSTART+1, RLENGTH-2); sub(str, tolower(str)) }1'