sed是否只有一个选项来检查文件中是否存在字符串?

时间:2013-04-22 19:13:42

标签: bash sed

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

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

2 个答案:

答案 0 :(得分: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是工作的工具,我建议尽可能使用它。

答案 1 :(得分:3)

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

  

q [退出代码]

     

立即退出sed脚本而不处理任何其他输入,但如果未禁用自动打印,则当前模式空间   将被打印。退出代码参数是GNU扩展名。

另见answer for a clue

编辑:

正如@cbuckley所关联的,您可以找到路线here