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 sed
verwendetgrundlegende 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 -r
Option für sed
bezeichnet ERE:
-r, --regexp-extended
use extended regular expressions in the script.
Darüber hinaus -e
ist 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'