正则表达式到 select 对行
Regex expression to select pair of lines
我有一个日志文件。它的一般格式是
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/>
我想 select 并提取包含错误的 2 行对(每个错误有两行。第一行总是有 Error: 作为关键字。Word Error 不会出现在日志文件的其他任何地方)。
我如何使用正则表达式或任何其他方式来做到这一点。我可以使用 MacOS、Unix 或 Windows XP。首选 MacOS。
在 mac 或基于 unix 的 OS
上使用 grep
grep -i error -A2 inputfile
查找这两行的正则表达式例如:
^.*?Error.*(?:\r?\n|\r).*$
^
... 在一行的开头开始每次搜索。
.*?
... 匹配除回车 return 和换行之外的任何字符零次或多次非贪婪。非贪婪意味着尽可能少的字符。换句话说,在 Error
第一次出现时停止,而不是在最后一次出现时停止。
Error
... 这个词必须在两行的第一行中找到才能匹配。
.*
... 匹配除回车 return 和换行之外的任何字符零次或多次贪婪。贪婪意味着现在匹配尽可能多的字符。
(?:\r?\n|\r)
... 是匹配回车符 return + 换行符(DOS/Windows 文本文件)或仅换行符(UNIX 文本文件)的非标记组),或仅回车 return(旧 MAC 文本文件)。
.*
... 匹配除回车 return 和换行之外的任何字符 0 次或多次贪心。
$
... 行尾的锚点。匹配字符串中不包含行终止符。
换句话说,这个表达式匹配包含单词 Error
的整行,第一行的行结束符和下一行直到行尾的所有内容,但不匹配的行结束符这第二行。
UltraEdit 是适用于 Windows、Linux 和 Mac.
的共享软件文本编辑器
在 Search - Find 对话框中使用此 Perl 正则表达式 UltraEdit 高级查找选项 列出包含字符串的行 启用导致将所有找到的 2 行字符串写入 window 列出所有找到的行。
打开此 window 的上下文菜单(右键单击 Windows)并单击 复制到剪贴板 会导致将所有找到的行复制到系统剪贴板。
按 Ctrl+N 打开一个新文件,按 Ctrl+V 粘贴复制的行,按 Ctrl+S 保存新文件最终得到一个包含所需信息的文件。
另一种方法是使用 UltraEdit 脚本 FindStringsToNewFile 和简化的正则表达式搜索字符串 Error.*(?:\r?\n|\r).*
。此脚本将所有找到的以关键字 Error
开头并在下一行末尾结束的字符串直接写入新文件。
再补充一点:
如果 .
(点)也匹配换行符,如回车 return 并且换行符取决于标志。在 UltraEdit 中,标志默认设置为点不匹配换行符。在 Perl 正则表达式搜索字符串的开头使用 (?s)
标志被更改,然后点将匹配此搜索的换行符。在搜索字符串的开头使用 (?-s)
如果应用程序的内部默认设置相反,则可以将标志设置为不通过点匹配换行符。
我有一个日志文件。它的一般格式是
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/>
我想 select 并提取包含错误的 2 行对(每个错误有两行。第一行总是有 Error: 作为关键字。Word Error 不会出现在日志文件的其他任何地方)。
我如何使用正则表达式或任何其他方式来做到这一点。我可以使用 MacOS、Unix 或 Windows XP。首选 MacOS。
在 mac 或基于 unix 的 OS
上使用 grepgrep -i error -A2 inputfile
查找这两行的正则表达式例如:
^.*?Error.*(?:\r?\n|\r).*$
^
... 在一行的开头开始每次搜索。
.*?
... 匹配除回车 return 和换行之外的任何字符零次或多次非贪婪。非贪婪意味着尽可能少的字符。换句话说,在 Error
第一次出现时停止,而不是在最后一次出现时停止。
Error
... 这个词必须在两行的第一行中找到才能匹配。
.*
... 匹配除回车 return 和换行之外的任何字符零次或多次贪婪。贪婪意味着现在匹配尽可能多的字符。
(?:\r?\n|\r)
... 是匹配回车符 return + 换行符(DOS/Windows 文本文件)或仅换行符(UNIX 文本文件)的非标记组),或仅回车 return(旧 MAC 文本文件)。
.*
... 匹配除回车 return 和换行之外的任何字符 0 次或多次贪心。
$
... 行尾的锚点。匹配字符串中不包含行终止符。
换句话说,这个表达式匹配包含单词 Error
的整行,第一行的行结束符和下一行直到行尾的所有内容,但不匹配的行结束符这第二行。
UltraEdit 是适用于 Windows、Linux 和 Mac.
的共享软件文本编辑器在 Search - Find 对话框中使用此 Perl 正则表达式 UltraEdit 高级查找选项 列出包含字符串的行 启用导致将所有找到的 2 行字符串写入 window 列出所有找到的行。
打开此 window 的上下文菜单(右键单击 Windows)并单击 复制到剪贴板 会导致将所有找到的行复制到系统剪贴板。
按 Ctrl+N 打开一个新文件,按 Ctrl+V 粘贴复制的行,按 Ctrl+S 保存新文件最终得到一个包含所需信息的文件。
另一种方法是使用 UltraEdit 脚本 FindStringsToNewFile 和简化的正则表达式搜索字符串 Error.*(?:\r?\n|\r).*
。此脚本将所有找到的以关键字 Error
开头并在下一行末尾结束的字符串直接写入新文件。
再补充一点:
如果 .
(点)也匹配换行符,如回车 return 并且换行符取决于标志。在 UltraEdit 中,标志默认设置为点不匹配换行符。在 Perl 正则表达式搜索字符串的开头使用 (?s)
标志被更改,然后点将匹配此搜索的换行符。在搜索字符串的开头使用 (?-s)
如果应用程序的内部默认设置相反,则可以将标志设置为不通过点匹配换行符。