Regex 用于选择行对的正则表达式

Regex 用于选择行对的正则表达式,regex,editor,expression,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 l

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

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/>
日志文本1
日志文本2
错误:xxxxxx
错误说明(仅1行)
日志文本3
日志文本4
....
错误:xxxxxx
错误说明(仅1行)
日志文本5
....
我想选择并提取包含错误的两行(每个错误有两行。第一行总是有错误:as关键字。Word error不会出现在日志文件的其他任何地方)


我如何使用regex或其他方法来实现它。我可以使用MacOS、Unix或Windows XP。首选MacOS。

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

grep -i error -A2 inputfile

查找这两行的正则表达式如下所示:

^.*?Error.*(?:\r?\n|\r).*$
^
。。。在行首开始每次搜索

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

错误
。。。必须在两行中的第一行找到该单词才能匹配

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

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

*
。。。匹配除回车符和换行符以外的任何字符0次或更多次

$
。。。锚定线的末端。匹配字符串中不包括行终止

换句话说,此表达式匹配包含单词
Error
的任何位置的整行、第一行的行终止符以及下一行直到行末的所有内容,但不匹配第二行的行终止符

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

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

打开此窗口的关联菜单(右键单击Windows)并单击“复制到剪贴板”将所有找到的行复制到系统剪贴板

按Ctrl+N以打开新文件,按Ctrl+V以粘贴复制的行,按Ctrl+S以保存新文件,最终将生成包含所需信息的文件

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

另请注意:


如果
(点)也匹配换行符,如回车符和换行符,则取决于标志。在UltraEdit中,默认情况下,标记设置为点与换行符不匹配。在Perl正则表达式搜索字符串的开头使用
(?s)
,标志将更改,点也将匹配此搜索的换行符。使用
(?-s)
在搜索字符串的开头,如果应用程序的内部默认值与之相反,则可以将标记设置为不匹配换行符(以点为单位)。

什么编辑器程序?这正是我要找的。非常感谢。