我运行以下code
sed 's/\([^ ]+\) your \([^ ]+\)/ \2\1er/' < fail
文件失败
fail your test
上面的命令给了我
fail your test
虽然它应该给“testfailer”。
第二个和第一个全球\2\1
应该在“呃”这个词的开头。
这表明问题可能出在搜索部分的正则表达式中。
但是,它们似乎对我来说是正确的。
您是否在代码中看到任何错误?
答案 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