在Unix中检查文件是否包含一些文本(不是正则表达式)

时间:2013-01-31 17:38:27

标签: unix grep

我想检查多行文字是否与输入匹配。 grep接近,但我找不到一种方法让它将模式解释为纯文本,而不是正则表达式。

如何只使用Unix实用程序?

3 个答案:

答案 0 :(得分:4)

使用grep -F

  

-F, --fixed-strings

     

将PATTERN解释为固定字符串列表,由换行符分隔,其中任何一个都要匹配。 (-F由...指定   POSIX)

编辑:最初我不太了解这个问题。如果模式本身包含换行符,请使用-z选项:

   -z, --null-data
          Treat  the  input  as  a set of lines, each terminated by a zero
          byte (the ASCII NUL character) instead of a newline.   Like  the
          -Z  or --null option, this option can be used with commands like
          sort -z to process arbitrary file names.

我测试了它,多线模式有效。

答案 1 :(得分:1)

来自man grep

-F, --fixed-strings
       Interpret  PATTERN  as  a  list  of  fixed strings, separated by
       newlines, any of which is to be matched.  (-F  is  specified  by
       POSIX.)

答案 2 :(得分:1)

如果您要匹配的输入字符串不包含空行(例如,它没有两个连续的换行符),您可以这样做:

awk 'index( $0, "needle\nwith no consecutive newlines" ) { m=1 }
    END{ exit !m }' RS= input-file && echo matched

如果需要查找带有连续换行符的字符串,请将RS设置为文件中不存在的字符串。 (请注意,如果您将RS设置为多个字符,则未指定awk的结果,但大多数awk将允许它为字符串。)如果您愿意将搜索到的字符串设为正则表达式,并且如果您的awk支持将RS设置为多个字符,您可以这样做:

awk 'END{ exit NR == 1 }' RS='sought regex' input-file && echo matched