【发布时间】:2011-08-26 01:57:59
【问题描述】:
我被困住了,无法理解它:我如何告诉 sed 返回找到的值,否则闭嘴?
这真的超出了我的理解:如果 sed 一无所获,为什么会返回整个字符串?我是否必须对返回的字符串运行 another 测试来验证它?我尝试使用(非常短的)手册页中的“-n”,但它有效地抑制了所有输出,包括匹配的字符串。
这就是我现在拥有的:
echo plop-02-plop | sed -e 's/^.*\(.\)\([0-9][0-9]\)\1.*$/\2/'
返回
02(这很好,很漂亮,非常感谢),但是:
echo plop-02plop | sed -e 's/^.*\(.\)\([0-9][0-9]\)\1.*$/\2/'
返回
plop-02plop (当它应该返回 this = "" nothing!该死的,你什么也没找到,所以安静点!
大声哭泣!!)
我尝试检查返回值,但这也失败了!喘气!!
$ echo plop-02-plop | sed -e 's/^.*\(.\)\([0-9][0-9]\)\1.*$/\2/' ; echo $?
02
0
$ echo plop-02plop | sed -e 's/^.*\(.\)\([0-9][0-9]\)\1.*$/\2/' ; echo $?
plop-02plop
0
$
最后一个我简直不敢相信。 sed 真的是我应该使用的工具吗?我想从大海捞针,我想要一根针或什么都没有..?
【问题讨论】:
-
如您所见,
sed正在按照您的要求做;它是一个流编辑器,并将其输入打印到脚本修改的输出中。您的不匹配案例没有更改数据,因此回显的是您的输入 - 这是sed的正确行为。抑制输出的答案是使用-n,然后在您想要打印某些内容时添加显式p。