sed中正则表达式中的全局和分组问题

时间:2009-04-29 16:42:02

标签: regex sed glob

我运行以下code

sed 's/\([^ ]+\) your \([^ ]+\)/ \2\1er/' < fail

文件失败

fail your test

上面的命令给了我

fail your test

虽然它应该给“testfailer”。

第二个和第一个全球\2\1应该在“呃”这个词的开头。 这表明问题可能出在搜索部分的正则表达式中。 但是,它们似乎对我来说是正确的。

您是否在代码中看到任何错误?

2 个答案:

答案 0 :(得分:5)

普通或花园种类sed正则表达式不理解+。是的,我知道,那是多么愚蠢。所以这是命令行的等效工作版本:

sed 's/\([^ ][^ ]*\) your \([^ ][^ ]*\)/ \2\1er/' < fail

也可以请求扩展的正则表达式,在这种情况下你抛弃了parens上的反斜杠:

sed -r 's/([^ ]+) your ([^ ]+)/ \2\1er/' < fail

答案 1 :(得分:4)

当您逃脱加号时,您的代码会起作用:

sed 's/\([^ ]\+\) your \([^ ]\+\)/\2\1er/' < fail