1

我运行以下代码

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

文件失败是

fail your test

上面的命令给了我

fail your test

虽然它应该给出“testfailer”。

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

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

4

2 回答 2

5

普通或花园品种sed正则表达式不理解 +。是的,我知道,这有多愚蠢。因此,这是您的命令行的等效工作版本:

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

也适用于请求扩展的正则表达式,在这种情况下,您放弃括号上的反斜杠:

sed -r 's/([^ ]+) your ([^ ]+)/ \2\1er/' < fail
于 2009-04-29T16:46:39.413 回答
4

当您转义加号时,您的代码确实有效:

sed 's/\([^ ]\+\) your \([^ ]\+\)/\2\1er/' < fail
于 2009-04-29T16:49:19.937 回答