我使用PCRE正则表达式搜索和经常更换使用文本编辑器工作时,我被留下颇为不满后,我发现,在强大的Unix命令行工具一样perl
,awk
或者sed
它是相当复杂的使用有点先进的多正则表达式,并要求各难以记住各种情况下的语法。
是否有适用于 Linux 的命令行工具,其中使用更复杂的多行正则表达式搜索和替换(针对整个文件中的所有出现)非常简单:
magicregextool 's/.* > (.*) joined the channel\.\n(((?!.* \1 (was kicked from channel\.|was banned from channel\.)\n).*\n)+?.*\1 disconnected)/\2/' file.txt
Run Code Online (Sandbox Code Playgroud)
即要匹配的正则表达式与我search for
在文本编辑器中放置在字段中的相同,替换字符串也可以处理多行正则表达式,并且不需要任何复杂的语法?
编辑:
每个请求我附加一个输入,我将使用上面的示例正则表达式并解释我想要它实际做什么。
像这样的输入:
2016-05-16 06:17:00 > foobar joined the channel.
2016-05-16 06:17:13 <foobar> hi
2016-05-16 06:18:30 > foobar was kicked from channel.
2016-05-16 06:18:30 > foobar disconnected
2016-05-16 06:20:13 > user joined the channel.
2016-05-16 06:20:38 <user> bye
2016-05-16 06:21:57 > user disconnected
Run Code Online (Sandbox Code Playgroud)
应该产生这个输出:
2016-05-16 06:17:00 > foobar joined …
Run Code Online (Sandbox Code Playgroud)