我想检查多行文字是否与输入匹配。 grep
接近,但我找不到一种方法让它将模式解释为纯文本,而不是正则表达式。
如何只使用Unix实用程序?
答案 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