2016-08-23 86 views
0

我想grep一个包含换行符的字符串。我发现this question但接受的答案建议-F选项,它使用一组换行符分隔的字符串。我还发现this question,它使用pcregrep-M选项,但匹配正则表达式而不仅仅是文字字符串。如何测试文件是否包含特定的多行字面字符串?

那么如何测试文件是否包含特定的多行字面字符串?

+0

是否要搜索特定的多行字符串?为什么正则表达式不适用?你也可以跳过所有特殊字符,然后使用'pcregrep -M'。 –

+0

是的,一个特定的字符串。编辑了这个问题。我不想使用正则表达式,因为要搜索的字符串包含一串特殊字符,我将不得不逃脱。这也是一个大文件(大约150MB),所以我的猜测是文字搜索会更快。 –

+0

检查简单的正则表达式比固定字符串检查的速度慢得可以忽略(在这两种情况下,字符串只能被扫描一次)。如果优化到最后一毫秒并不重要,则可以转义字符串。如果你不必每秒都做,150MB并不是什么大不了的事情。 –

回答

0

这里是你可以做它用awk一个办法:

awk -v str="$string" 'BEGIN { n = split(str, lines, /\n/); i = 1 } 
    lines[i] == $0 { if (i++ == n) print "matched"; next } { i = 1 }' file 

分割字符串成线阵列。 n是总行数(由split返回)和i跟踪要比较的当前行。

如果当前行匹配且我们已到达最后一行,请打印该消息并跳至下一行。否则,将行计数器重置为1

-1

只要检查回车符和新行,如果行索引增加,但没有回车符或新行char(取决于OS),那么是多行字符串。林不知道这是否可以使用grep做,但应该是很容易与任何编程语言,甚至bash的实施

+0

啊,对不起,我有点不清楚。我的意思是我想要搜索特定的多行字符串,而不仅仅是多行字符串。我将编辑该问题。 –

相关问题