该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
选项,但我没有成功。
您可以使用 q n以退出状态n退出- 但要使其有用,您还需要使用一些Branching 和 Flow Control:
最好为n选择一个不同于标准退出状态值之一的值:
所以例如
然而
如果您想省略模式空间的默认打印,请替换
q
为Q
(注意这Q
是 GNU 扩展)。以下是如何使用 sed 搜索正则表达式,并突出显示匹配项,如果未找到匹配项,则返回退出代码(5):
这是 input.txt:
这是我打印所有 + 突出显示匹配 + 返回退出代码的功能:
当没有匹配时,它将返回退出代码 (5)。您可以将它与 cat 和 pipe | 一起使用 还有:
* 未找到匹配项 *
感谢https://unix.stackexchange.com/a/405725/43233 - 我正在使用它 + sed 退出选项。
重复答案https://stackoverflow.com/a/61808364/10440128
输出:
所以,要检查 sed 是否替换了某些东西:
输出:
限制:只能处理一个替换。所以这不起作用:
错误:
(sed 将之后的所有内容
w
视为文件路径)解决方法:使用多个 sed 调用