我需要从非常大的文件中提取一些信息
我想使用正则表达式提取特定行
最快的方法是什么?
我在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
的示例。
答案 0 :(得分:0)
我使用pcregrep
和newline
解决了这个问题,工作得很好!
pcregrep -M '(HELLO[[:space:]]([[:alnum:]]|\/|_)+[[:space:]];)[\r\n]([[:space:]]*some[[:space:]]statement[[:space:]];)' test.txt