Verwenden von sed zum Durchführen von Ersetzungen in einer Datei

Verwenden von sed zum Durchführen von Ersetzungen in einer Datei

Ich habe versucht, Daten in einer großen Datei mit sed zu ersetzen. Ich habe Folgendes versucht:

sed -ie 's/2014-[0-9]{2}-[0-9]{2}/2014-05-07/g' test

Es passierte jedoch überhaupt nichts, meine Datei test wurde nicht geändert. Wissen Sie, was mir hier fehlt?

Vielen Dank.

Antwort1

Standardmäßig sedverwendetgrundlegende reguläre Ausdrücke. In BRE verhalten sich , , , {wie }normale Zeichen. Daher müssen Sie das und maskieren :(){}

sed -i 's/2014-[0-9]\{2\}-[0-9]\{2\}/2014-05-07/g' test

Sie müssen diese nicht maskieren, wenn Sie erweiterte reguläre Ausdrücke verwenden, d. h.

sed -r -i 's/2014-[0-9]{2}-[0-9]{2}/2014-05-07/g' test

Die -rOption für sedbezeichnet ERE:

   -r, --regexp-extended

          use extended regular expressions in the script.

Darüber hinaus -eist die Verwendung in Ihrem Beispiel überflüssig.

Antwort2

Versuchen Sie, die geschweiften Klammern zu umgehen:

sed -ie 's/2014-[0-9]\{2\}-[0-9]\{2\}/2014-05-07/g' test

Antwort3

Entweder

echo "foo 2014-01-01 bar" | sed -r 's/2014-[0-9]{2}-[0-9]{2}/2014-05-07/g'

oder

echo "foo 2014-01-01 bar" | sed 's/2014-[0-9]\{2\}-[0-9]\{2\}/2014-05-07/g'

verwandte Informationen