Mit GNU sed ist das möglich. Wählen Sie eine dieser beiden Formen basierend auf der Gier des Ersatzes.
sed 's|=.*,|\L&|' file
sed 's|=[^,]*,|\L&|' file
Wie im Handbuch angegeben, "\L
verwandelt die Ersetzung in Kleinbuchstaben bis zu einer \U
oder \E
gefunden wird". &
ist der Text, auf den die Regex passt.
Ich habe die Beispieldatei modifiziert, um zu zeigen, dass Sie mit Bedacht zwischen den geedy =.*,
wählen sollten und der nicht gierige =[^,]*,
reguläre Ausdrücke:
$ 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
Auf jedem POSIX-kompatiblen awk
, können Sie den tolower()
verwenden Funktion
awk -v FS='=' 'BEGIN { OFS = FS } { $2 = tolower($2) }1 ' file
Verwenden Sie den mktemp()
Funktion zum Erstellen einer temporären Datei, um die Ausgabe des obigen Befehls umzuleiten, und leiten Sie dann zurück, um an Ort und Stelle zu speichern. Oder verwenden Sie GNU awk
>=4.1 mit -i inplace
Eine weitere Variante der POSIX-kompatiblen Version, die match()
verwendet Funktion wäre zu tun
awk 'match($0, /=([^,]*),/) { str = substr($0, RSTART+1, RLENGTH-2); sub(str, tolower(str)) }1'