it-swarm.com.de

Ersetzen Sie Strings mit Sed und Regex

Ich versuche, Dateiinhalte mit sed, aber mit Regex zu dekommentieren (Beispiel: [0-9] {1,5}).

# one two 12
# three four 34
# five six 56

Folgendes funktioniert:

sed -e 's/# one two 12/one two 12/g' /file

Ich möchte jedoch Regex-Muster verwenden, um alle Übereinstimmungen zu ersetzen, ohne Zahlen einzugeben, aber die Zahlen im Ergebnis beizubehalten.

19
tangi

Zur Beantwortung von Beispielfragen einfach

sed 's/^# //' file

wird ausreichen, aber wenn es notwendig ist, den Kommentar nur in einigen Zeilen zu entfernen, die einen bestimmten regulären Ausdruck enthalten, können Sie conditionnal address verwenden:

sed '/regex/s/^# //' file

Also werden alle Zeilen, die regex enthalten, nicht kommentiert (wenn Zeile beginnen mit einem #)

... wo regex sein könnte [0-9]$ wie:

sed '/[0-9]$/s/^# //' file

wird Entfernen # am Anfang von Zeilen, die eine Zahl als letztes Zeichen enthalten.

15
F. Hauri
sed -e 's/^#\s*\(.*[0-9].*\)$/\1/g' filename

sollte es tun.

7
Charles Engelke

Wenn Sie nur solche Zeilen ohne Kommentar haben möchten, die Zahlen enthalten, können Sie dies verwenden:

sed -e 's/^#\s*\(.*[0-9]+.*\)/\1/g' file
0
Hari Menon

Ist die Option -i Zum Ersetzen in der jeweiligen Datei nicht erforderlich? Ich kann führenden # Entfernen, indem ich Folgendes verwende:

sed -i "s/^# \(.*\)/\1/g" file

Um nur die kommentierten Zeilen zu entfernen, die auf einer Folge von mindestens einer Ziffer enden, würde ich es folgendermaßen verwenden:

sed -i "s/^# \(.*[[:digit:]]\+$\)/\1/g" file

Diese Lösung erfordert kommentierte Zeilen, die mit einem Leerzeichen beginnen (direkt hinter dem #), Aber das sollte einfach anzupassen sein, wenn es nicht zutreffend ist.

0
J. Katzwinkel

Mit dem folgenden Befehl sed werden Zeilen mit Zahlen aus dem Kommentar entfernt:

sed 's/^#\s*\(.*[0-9]\+.*$\)/\1/g' file
0
dogbane