当前位置: 首页 > 面试题库 >

sed的返回码不匹配

籍昱
2023-03-14
问题内容

我正在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}; {s/f/b/}',如果foo不存在,将以代码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在进行文本处理之前执行



 类似资料:
  • 问题内容: 我在file.txt中有以下数据: 我想将字符串替换为“-”之后的字符串,最多替换为“;” 只需加上“;”,就可以得到: 我尝试使用以下命令: 但这给了我以下错误: sed命令出现乱码 为什么会这样呢? 问题答案: 这应该工作:

  • 问题内容: 我正在使用Elasticsearch的php库对我的网站进行索引和查找文档。这是用于创建索引的代码: 然后,我使用curl XPUT将文档添加到索引,并使用XGET查询索引。除了返回结果时跨索引的单数和复数查询词不匹配之外,这种方法效果很好。例如,当我搜索“讨论”时,不返回“讨论”的匹配项,反之亦然。为什么会这样呢?我认为这是默认情况下在Elasticsearch中处理的。为了匹配单数

  • 我正在创建一个用户可以登录的网站。当他们创建帐户时,我将哈希密码保存在数据库中。我正在尝试使用password_verify()来确认密码匹配,但它返回false。 为了确认它们匹配,我打印出用户输入的哈希版本和存储在数据库中的哈希密码。我知道一个常见的问题是数据库密码字段对于散列密码来说太小,但我尝试将其设置为VARCHAR(256)和TEXT,以确保存储整个散列密码。 我希望password_

  • 在我的左表中,我有所有EMP信息和所有可能的资产,所以所有员工都被分配参加数据库中列出的所有课程。在正确的表格中,我只有参加过或正在参加课程的员工。(两个表都是查询,结果都是正确的) 我想在两个表之间进行左连接(查询),这样我就可以让左表中的所有员工使用新列(完成日期)连接右表 然而,当我离开join时,它会返回我的所有行,并用两种可能的完成状态(已完成或正在进行)填充空格。最愚蠢的事情发生在我添

  • 我尝试进入调试模式,它似乎无法提取字符串的特定部分。我做错了什么?我的regex错了吗?它似乎与我尝试过的所有在线regex构建器/测试器相匹配。