3

sed 是否有类似于 的选项grep -q,它返回 1 或 0 取决于它是否实际找到字符串匹配?

我问的原因是在某些情况下我sed以特定方式使用,例如在给定行号之后查找第一个匹配项,或者设置捕获组并以这种方式获取字符串,所以我想看看是否sed有内置的东西可以检查如果返回任何内容,因为我想向用户抛出错误并在找不到匹配项时退出我的 bash 脚本

4

2 回答 2

4

你最好使用grep -q这个,但如果你绝对想使用sed那么这里是你如何复制功能......

cat myFile | sed -n "/myString/p" | wc -l

这将输出文件中“myString”的出现次数。从这里你可以做一个简单的测试,看看这个数字是否大于 0,如果是,则返回 1,如果不是,则返回 0。这是一个演示如何完成此操作的脚本......

#!/bin/bash
count=$(cat myFile | sed -n "/\myString/p" | wc -l)
final=0
if [ count -gt 0 ]; then
    final=1
else
    final=count
fi
echo final

上面的脚本将打印出 1 或 0,如果找到字符串,则打印 1,如果没有,则打印 0(注意:我没有检查过这个,但没有理由不工作)。

同样,grep -q这是工作的工具,如果可能的话,我建议使用它。

于 2013-04-22T19:42:06.413 回答
3

q您可以使用in 中的命令设置退出代码sed

q [退出代码]

立即退出 sed 脚本,不再处理任何输入,除非自动打印未禁用,当前模式空间将被打印。退出代码参数是 GNU 扩展。

另请参阅此答案以获取线索

编辑:

正如@cbuckley 友情链接的那样,您可以在此处找到路线。

于 2013-04-22T19:37:50.783 回答