运行以下命令时
echo "abc>asf<tfg"|sed 's/.*>\(.*\)</\1/'
输出为:
韋斯特
我不明白为什么tfg
会打印出来?我的预期结果是安息日。不过,它在下面运行良好。
expr `echo "abc>asf<tfg"` : '.*>\(.*\)<'
这让我:
安息日
并帮助我提取从管道接收输入时的>
字符串。<
答案1
s
中的命令是sed
匹配和替换。 在您的例子中,.*>\(.*\)<
是要匹配的模式,\1
是要替换的模板。
当您尝试.*>\(.*\)<
在 的开头找到 的匹配项时abc>asf<tfg
,结果为abc>asf<
。然后,字符串的这一部分将被 替换为asf
。tfg
未匹配,因此不会发生任何事情。
使用它.*>\(.*\)<.*
作为匹配模式应该会得到你想要的结果。