GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwenden von sed zum Ersetzen zwischen einem bestimmten Muster

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'

Linux
  1. Wie ersetze ich eine Zeichenfolge in einer oder mehreren Dateien?

  2. Mehrzeiliger Musterabgleich mit Sed, Awk oder Grep?

  3. Mtime einer bestimmten Datei mit Bash abrufen?

  4. Entferne ein bestimmtes Zeichen mit awk oder sed

  5. Suchen und ersetzen Sie Text in einer Datei zwischen einem Zeilenbereich mit sed

So entfernen Sie Zeilen aus einer Datei mit dem Sed-Befehl

Unix Sed Tutorial:Suchen und Ersetzen von Text in einer Datei mit RegEx

Unix Sed Tutorial:So schreiben Sie mit Sed in eine Datei

So verwenden Sie Sed zum Suchen und Ersetzen einer Zeichenfolge in einer Datei

Einfügen mehrerer Zeilen in eine Datei nach einem bestimmten Muster mit Shell-Skript

Wie ändere ich eine Datei direkt mit awk? (wie bei sed -i)