2016-08-08 81 views
0

Ich versuche, eine Zeichenfolge in einer Datei auf dem Mac-Terminal mit sed zu suchen und zu ersetzen. Ich bin in der Lage, eine einfache Zeichenfolge zu suchen und ersetzen:Sed suchen und ersetzen auf Variable Zeichenfolge

sed -i.bak 's/HOSTS/BOASTS/g' file.txt 

Aber ich versuche es auf etwas ein wenig komplizierter, im Grunde die Zeichenfolge Ich mag etwas ersetzen, wie ‚HOSTS aussieht:" 123.123.123.123, 12345 "'- Da die 123.123.123.123 eine variable IP ist, kann ich nicht genau danach suchen, also versuche ich, reguläre Ausdrücke zu verwenden, hauptsächlich das". " um anzuzeigen, dass ich nicht weiß, wie die IP-Adresse sein wird.

Ich habe folgendes ohne Glück versucht:

sed -i.bak 's/HOSTS:"., 00000"/HOSTS:"999.999.999.999, 00000"/g' file.txt 

Antwort

1

Sie könnten die folgende versuchen:

echo "HOSTS:\"123.123.123.123, 12345\"" | sed -e 's/[0-9][0-9][0-9]\.[0-9][0-9][0-9]\.[0-9][0-9][0-9]\.[0-9][0-9][0-9]/999.999.999.999/g'. 

jeder [0-9] wird für eine Ziffer suchen, und jeder \. ist das eigentliche Symbol, nicht das "Match a Character" -Symbol auf sed. Dies setzt voraus, dass die IPs immer diese Struktur haben. Wenn Sie mit xxx.xxx.xxx.xxx:xxxx zu tun haben, müssen Sie entsprechend bearbeiten.

+0

Ich schlage eine permissivere IP-Regex vor: '[0-9] \ + \. [0-9] \ + \. [0-9] \ + \. [0-9] \ + /' where ' \ + 'signalisiert 1 oder mehr des vorhergehenden Zeichens Dies funktioniert für IP-Adressen wie 4.2.2.2 (eine gültige IP). – sage