我试图使用 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
表示sed
ERE:
-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'