从大文件中提取信息,在awk regex中使用换行符

时间:2014-09-04 12:32:17

标签: c++ regex shell awk

我需要从非常大的文件中提取一些信息 我想使用正则表达式提取特定行 最快的方法是什么?
我在Linux上用c ++编写代码。

我想使用grep,但似乎我的正则表达式没有按预期工作 例如\s\w无法正常工作 在man grep中写道,\w[:alnum:]是同义词,因此,\w应该正常运行,但不应该。

我需要在我的正则表达式中使用换行符,因此,我无法使用grep,因此,我决定使用awk。 我应该如何在newline正则表达式中使用awk字符? 我们假设我们有一个文件(test.txt),内容如下:

  

HELLO worl_d5;一些声明
你好世界1;一些   声明嗨嗨嗨一些声明
......

我想只获得这些内容:

  

HELLO worl_d5;一些声明
你好世界1;一些   声明

也就是说,我希望找到以HELLO字开头的行,后跟空格字符,然后是一些字母数字(或包含/)字,后跟空格字符和然后,一个;。但是当我们只跟着some statement行时,我希望得到这种线条。

我写道:

awk '/HELLO[[:space:]]([[:alnum:]]|\/)+[[:space:]];\n[[:space:]]*some[[:space:]] statement [[:space:]];/ { print }' test.txt

但我无法获得所需的结果。

或者只是提供一个在正则表达式中使用newline的示例。

1 个答案:

答案 0 :(得分:0)

我使用pcregrepnewline解决了这个问题,工作得很好!

pcregrep -M '(HELLO[[:space:]]([[:alnum:]]|\/|_)+[[:space:]];)[\r\n]([[:space:]]*some[[:space:]]statement[[:space:]];)' test.txt