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

在Unix中检查文件是否包含一些文本(不是正则表达式),unix,grep,Unix,Grep,我想检查多行文本是否与输入匹配grep很接近,但我找不到一种方法让它将模式解释为纯文本,而不是正则表达式 仅使用Unix实用程序如何执行此操作?来自 使用grep-F: -F,--固定字符串 将模式解释为固定字符串的列表,由新行分隔,其中任何一个都要匹配。(-F由 POSIX.) 编辑:起初我对这个问题理解得不够好。如果图案本身包含换行符,请使用-z选项: 我已经测试过了,多行模式有效。如果您试图匹配的输入字符串不包含空行(例如,它没有两个连续的换行符),您可以执行以下操作: awk 'inde

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

仅使用Unix实用程序如何执行此操作?

来自


使用
grep-F

-F,--固定字符串

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

编辑:起初我对这个问题理解得不够好。如果图案本身包含换行符,请使用
-z
选项:


我已经测试过了,多行模式有效。

如果您试图匹配的输入字符串不包含空行(例如,它没有两个连续的换行符),您可以执行以下操作:

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

除非我遗漏了什么,否则我认为我无法将多行输入与此匹配。例如,将文件中的“a\nb”与“z\na\nb\nc”匹配?它在ubuntu上不起作用:与
echo'->'| grep-F'->'
。我得到
用法:grep[OPTION]。。。模式[文件]…
awk 'index( $0, "needle\nwith no consecutive newlines" ) { m=1 }
    END{ exit !m }' RS= input-file && echo matched
awk 'END{ exit NR == 1 }' RS='sought regex' input-file && echo matched