REGEX 的行为有所不同!

REGEX 的行为有所不同!

运行以下命令时

echo "abc>asf<tfg"|sed 's/.*>\(.*\)</\1/'

输出为:

韋斯特

我不明白为什么tfg会打印出来?我的预期结果是安息日。不过,它在下面运行良好。

expr `echo "abc>asf<tfg"`  : '.*>\(.*\)<'

这让我:

安息日

并帮助我提取从管道接收输入时的>字符串。<

答案1

s中的命令是sed匹配和替换。 在您的例子中,.*>\(.*\)<是要匹配的模式,\1是要替换的模板。

当您尝试.*>\(.*\)<在 的开头找到 的匹配项时abc>asf<tfg,结果为abc>asf<。然后,字符串的这一部分将被 替换为asftfg未匹配,因此不会发生任何事情。

使用它.*>\(.*\)<.*作为匹配模式应该会得到你想要的结果。

相关内容