使用 sed 在文件中执行替换

使用 sed 在文件中执行替换

我试图使用 sed 替换一个大文件中的日期。我试过 :

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

然而,什么也没发生,我的文件测试没有被修改。你知道我在这里缺少什么吗?

非常感谢。

答案1

默认情况下,sed使用基本正则表达式。在 BRE 中,{}()的行为就像普通字符一样。因此,您需要转义{and }

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表示sedERE:

   -r, --regexp-extended

          use extended regular expressions in the script.

此外,-e在您的示例中,使用是多余的。

答案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'

相关内容