我正在使用 sed
在运行时更新我的 JSON 配置文件。
有时,当 JSON 文件中的模式不匹配时,sed
仍会以返回码 0 退出。
返回 0 表示成功完成,但是为什么 sed
找不到正确的模式并更新文件时返回 0 呢?有解决办法吗?
最佳答案
正如@cnicutar 所评论的,命令的返回码表示命令是否成功执行。与您在代码/脚本中实现的逻辑无关。
如果你有:
echo "foo"|sed '/bar/ s/a/b/'
sed 会返回 0
但如果你写了一些语法/表达式错误,或者输入/文件不存在,sed 无法执行你的请求,sed 将返回 1。
解决方法
这实际上不是解决方法。 sed 有 q
命令:(来自手册页):
q [exit-code]
在这里您可以根据需要定义退出代码。例如 '/foo/!{q100};如果
将以代码 100 退出,否则执行替换 f->b 并以代码 0 退出。foo
不存在,{s/f/b/}'
匹配大小写:
kent$ echo "foo" | sed '/foo/!{q100}; {s/f/b/}'
boo
kent$ echo $?
0
不匹配的情况:
kent$ echo "trash" | sed '/foo/!{q100}; {s/f/b/}'
trash
kent$ echo $?
100
我希望这能回答你的问题。
编辑
我必须补充一点,上面的示例仅用于单行处理。我不知道你的具体要求。当您想要获取 exit 1
时。一行不匹配或整个文件。如果整个文件大小写不匹配,你可以考虑 awk,甚至在你的文本处理之前做一个 grep
...
关于linux - sed 不匹配的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15965073/