正则表达式选择一对行

时间:2015-01-24 22:08:42

标签: regex editor expression

我有一个日志文件。其一般格式为

log text 1  <br/>
log text 2  <br/>
Error: xxxxxx  <br/>
error description (1 line only)  <br/>
log text 3 <br/>
log text 4  <br/>
....  <br/>
Error: xxxxxx  <br/>
error description (1 line only)  <br/>
log text 5  <br/>
....  <br/>

我想选择并提取包含两行错误的两行(每行错误有两行。第一行总是有错误:作为关键字。日志文件中的其他任何地方都不会出现Word错误。)

如何使用正则表达式或任何其他方式执行此操作。我可以使用MacOS,Unix或Windows XP。 MacOS首选。

2 个答案:

答案 0 :(得分:0)

在mac或基于unix的操作系统上使用grep

grep -i error -A2 inputfile

答案 1 :(得分:0)

例如,找到这两行的正则表达式是:

^.*?Error.*(?:\r?\n|\r).*$

^ ...在一行的开头开始每次搜索。

.*? ...匹配任何字符,除了回车和换行零次或多次非贪婪。非贪婪意味着尽可能少的字符。换句话说,在第一次出现Error时停止,而不是在最后一次出现时停止。

Error ...必须在2行中的第一行找到这个词才能匹配。

.* ...匹配任何字符,除了回车和换行零次或多次贪婪。贪婪意味着现在匹配尽可能多的角色。

(?:\r?\n|\r) ...是一个非标记组,匹配回车+换行(DOS / Windows文本文件),或仅匹配换行(UNIX文本文件),或仅回车(旧) MAC文本文件)。

.* ...匹配任何字符,除了回车和换行0次或多次贪婪。

$ ...锚定为行尾。匹配字符串中不包含行终止。

换句话说,这个表达式匹配包含单词Error的任何位置的整行,第一行的行终止符和下一行的所有内容一直到行尾,但是也不匹配第二行的行终止符线。

UltraEdit 是一个可用于Windows,Linux和Mac的共享软件文本编辑器。

搜索 - UltraEdit 搜索 - 查找对话框中使用 Perl 正则表达式,使用高级查找选项列出包含字符串的行启用结果将所有找到的2个线串写入列出所有找到的行的窗口。

打开此窗口的上下文菜单(右键单击Windows)并单击复制到剪贴板会导致将所有找到的行复制到系统剪贴板。

按Ctrl + N打开新文件,按Ctrl + V粘贴复制的行,按Ctrl + S保存新文件,最后得到一个包含所需信息的文件。

另一种方法是使用 UltraEdit 脚本FindStringsToNewFile和缩减的正则表达式搜索字符串Error.*(?:\r?\n|\r).*。此脚本将所有找到的字符串从关键字Error开始,并在下一行的结尾处直接写入新文件。

还有一点需要注意:

如果.(点)也匹配换行符,例如回车符和换行符取决于标志。在 UltraEdit 中,默认设置标志为点与换行符不匹配。在(?s)处于Perl正则表达式搜索字符串的开头时,标志会更改,然后该点也会匹配此搜索的换行符。如果在搜索字符串的开头有(?-s),则可以设置标志,如果应用程序的内部默认值相反,则不能使用点匹配换行符。