该grep
命令给出退出状态:
$echo "foo.bar" | grep -o foo
foo
$echo $?
0
$echo "foo.bar" | grep -o pop
$echo $?
1
但是我需要使用,sed
并且我意识到它没有退出状态:
$echo "foo.bar" | sed 's/bar.*$//'
foo.
$echo $?
0
$echo "foo.bar" | sed 's/pop.*$//'
foo.bar
$echo $?
0
我知道我应该-q
尝试使用该选项,但是我没有成功。
@Zanna我要发布一个答案,但是我觉得这实际上并没有回答问题。它仅解释了一个误解,但没有像Steeldriver所提供的那样提供有用的解决方案。因此,发表评论似乎更合适。
—
特登
sed
大多数情况下确实都具有退出状态,但是它并没有满足您的需要。sed
例如,如果命令失败,则如果您尝试在没有写访问权限或不存在写访问权限的文件上运行该命令,sed
则会以非0退出状态退出。退出状态仅表示是否已sed
按照您要求的方式进行了操作,并echo "foo.bar" | sed 's/pop.*$//'
已正确执行。它用删除了所有行pop
。没有这样的行是无关紧要的,该命令仍然有效。