Es posible con GNU sed. Elija una de estas dos formas en función de la codicia del reemplazo.
sed 's|=.*,|\L&|' file
sed 's|=[^,]*,|\L&|' file
Como dice el manual, "\L
cambia el reemplazo a minúsculas hasta un \U
o \E
se encuentra". &
es el texto que coincide con la expresión regular.
He modificado el archivo de muestra para mostrar que debes elegir sabiamente entre el geedy =.*,
y los no codiciosos =[^,]*,
expresiones regulares:
$ 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
En cualquier awk
compatible con POSIX , puedes usar el tolower()
función
awk -v FS='=' 'BEGIN { OFS = FS } { $2 = tolower($2) }1 ' file
Usa el mktemp()
función para crear un archivo temporal para redirigir la salida del comando anterior y luego redirigir para guardar en el lugar. O usa GNU awk
>=4.1 con -i inplace
Otra variante de la versión compatible con POSIX, usando match()
función sería hacer
awk 'match($0, /=([^,]*),/) { str = substr($0, RSTART+1, RLENGTH-2); sub(str, tolower(str)) }1'