C'est possible avec GNU sed. Choisissez l'une de ces deux formes en fonction de la gourmandise du remplaçant.
sed 's|=.*,|\L&|' file
sed 's|=[^,]*,|\L&|' file
Comme l'indique le manuel, "\L
transforme le remplacement en minuscule jusqu'à un \U
ou \E
est trouvé". &
est le texte correspondant à la regex.
J'ai modifié le fichier d'exemple pour montrer que vous devez choisir judicieusement entre le geedy =.*,
et le =[^,]*,
non gourmand expressions régulières :
$ 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
Sur n'importe quel awk
compatible POSIX , vous pouvez utiliser le tolower()
fonction
awk -v FS='=' 'BEGIN { OFS = FS } { $2 = tolower($2) }1 ' file
Utilisez le mktemp()
fonction pour créer un fichier temporaire pour rediriger la sortie de la commande ci-dessus, puis rediriger vers l'arrière pour enregistrer sur place. Ou utilisez GNU awk
>=4.1 avec -i inplace
Une autre variante de la version compatible POSIX, utilisant match()
fonction serait de faire
awk 'match($0, /=([^,]*),/) { str = substr($0, RSTART+1, RLENGTH-2); sub(str, tolower(str)) }1'