我运行以下代码
sed 's/\([^ ]+\) your \([^ ]+\)/ \2\1er/' < fail
文件失败是
fail your test
上面的命令给了我
fail your test
虽然它应该给出“testfailer”。
第二个和第一个 glob\2\1
应该在单词“er”的开头。这表明我的问题可能出在搜索部分的正则表达式中。但是,它们对我来说似乎是正确的。
您在代码中看到任何错误吗?
普通或花园品种sed
正则表达式不理解 +。是的,我知道,这有多愚蠢。因此,这是您的命令行的等效工作版本:
sed 's/\([^ ][^ ]*\) your \([^ ][^ ]*\)/ \2\1er/' < fail
也适用于请求扩展的正则表达式,在这种情况下,您放弃括号上的反斜杠:
sed -r 's/([^ ]+) your ([^ ]+)/ \2\1er/' < fail
当您转义加号时,您的代码确实有效:
sed 's/\([^ ]\+\) your \([^ ]\+\)/\2\1er/' < fail