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
オプション-r
はsed
EREを表します:
-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'