如果文件包含一个包含空格且分布在1行以上的相当复杂的模式,我想检查(true / false)。例如:
$ cat myfile
hello world
bye
两者都不起作用:
awk '/\nhello world\nbye/' myfile
grep "\nhello world\nbye" myfile
答案 0 :(得分:1)
使用GNU awk进行多字符RS:
gawk -v RS='^$' '/\nhello world\nbye/' myfile
答案 1 :(得分:0)
我建议
if grep -Pzq "\nhello wolrd\nbye" myfile; then
echo "Matched."
fi
有-P
告诉grep使用Perl正则表达式(支持换行符),-q
禁止输出,-z
使用空字节作为行分隔符而不是换行符,这意味着文本文件将被视为一个长“行”。 (二进制文件可以拆分成几个空字节分隔的块,除非你的模式包含空字节,否则这不应该是一个问题)
答案 2 :(得分:0)
如果你可以使用perl
,这将有效:
perl -ln0e '/\nhello world\nbye/ && {print "true"} || {print "false"}' myfile
true
使用的开关:
-l
:在每个打印语句后打印一个新行
-n
:将循环输入
-0
:将整个输入设为一条记录
-e
:评估代码