如何检查文件是否包含字符串而不包含任何其他内容

时间:2017-10-20 21:10:57

标签: bash

我在bash脚本中寻找像diff这样的东西,但是我可以检查文件内容是否与特定字符串完全匹配,而不是检查两个文件是否相等。如果文件中还有其他内容,我不希望它是真的,而是需要完全匹配。最好的方法是什么?

示例:

字符串是:" Hello World" 包含" Hello World"的文件没有其他任何东西可以满足,但其中包含" Hello World,Hello World"不会因为它比我想要完全匹配的字符串长。

1 个答案:

答案 0 :(得分:2)

如果您不需要对差异进行核算,您仍然可以使用diff(或cmp。您需要做的就是创建或“伪造”包含您要与之比较的字符串的文件。有几种方法可以做到这一点:

  • 使用diff指定的“here string”将字符串发送到标准输入的cmp<<<,并使用-作为参数让该程序知道应该从stdin读取:

    $ cmp filename - <<<"Hello World"
    

    (请注意,以这种方式传递的“Hello World”没有尾随换行符,与下面的其他一些建议不同)

  • 对于可能包含换行符的较长字符串,除了使用<<

    引入的“此处文档”外,同样的事情
    $ cmp filename - <<EOF
    Hello World
    and here is another line
    EOF
    

    (注意EOF可以是任何东西,只要确保它在开头和结尾都是一样的)

  • 将字符串写入临时文件并将其用作比较

    $ TMPFILE=$(mktemp)
    $ echo "Hello World" > "$TMPFILE"
    $ cmp filename "$TMPFILE"
    $ rm "$TMPFILE"
    
  • 将字符串传递给比较程序的标准输入

    $ echo "Hello World" | cmp filename -
    
  • 创建一个“假”文件,使用进程替换

    为比较程序提供所需的文本
    $ cmp filename <(echo "Hello World")