sed を使用してファイル内の置換を実行する

sed を使用してファイル内の置換を実行する

sed を使用して巨大なファイル内の日付を置き換えようとしました。試したのは次のとおりです。

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

しかし、何も起こりませんでした。ファイル テストは変更されていません。ここで何が欠けているかご存知ですか?

どうもありがとうございます。

答え1

デフォルトではsed基本的な正規表現BRE では、、、{}通常の文字のように動作し(ます。そのため、およびを)エスケープする必要があります。{}

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

拡張正規表現を使用する場合は、これらをエスケープする必要はありません。

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

オプション-rsedEREを表します:

   -r, --regexp-extended

          use extended regular expressions in the script.

さらに、-eあなたの例では using は冗長です。

答え2

中括弧をエスケープしてみてください:

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

答え3

どちらか

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

または

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

関連情報