linux - sed 不匹配的返回值

标签 linux json sed

我正在使用 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};如果 foo 不存在,{s/f/b/}' 将以代码 100 退出,否则执行替换 f->b 并以代码 0 退出。

匹配大小写:

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/

相关文章:

javascript - python对象和json对象有什么区别?

正则表达式匹配 sed 中的非 ASCII 字符

c++ - 我如何运行 GDB,在命令行中输入文本并查看可执行文件如何处理这些条目?

android - JSON 解析数据未显示在 ListFragment 中

c - 为什么程序不读取第二个参数文件?

java - 在 Java 中为 Request 对象定义集合字段时,更好的做法是什么?

shell - 使用 POSIX 工具将换行符替换为字符串 '\n'

linux - sed匹配N次

linux - 将 bash `ls` 输出转换为 json 数组

Linux 内核 : invoke call back function in user space from kernel space