grep或awk在文件中查找多行模式(带空格)

时间:2015-01-27 20:28:57

标签: awk grep

如果文件包含一个包含空格且分布在1行以上的相当复杂的模式,我想检查(true / false)。例如:

$ cat myfile 

hello world
bye

两者都不起作用:

awk '/\nhello world\nbye/' myfile
grep "\nhello world\nbye" myfile

3 个答案:

答案 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:评估代码