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

Léo*_* 준영 1 regex glob sed

我运行以下代码

sed 's/\([^ ]+\) your \([^ ]+\)/ \2\1er/' < fail
Run Code Online (Sandbox Code Playgroud)

文件失败了

fail your test
Run Code Online (Sandbox Code Playgroud)

上面的命令给了我

fail your test
Run Code Online (Sandbox Code Playgroud)

虽然它应该给"testfailer".

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

你看到代码中有任何错误吗?

cha*_*aos 5

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

sed 's/\([^ ][^ ]*\) your \([^ ][^ ]*\)/ \2\1er/' < fail
Run Code Online (Sandbox Code Playgroud)

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

sed -r 's/([^ ]+) your ([^ ]+)/ \2\1er/' < fail
Run Code Online (Sandbox Code Playgroud)

  • 如果您反斜杠,则在基本正则表达式中工作,如果不反斜杠,则在扩展正则表达式中工作. (2认同)