命令行工具,可轻松进行多行正则表达式搜索和替换

用户名

在使用文本编辑器时,我经常使用PCRE正则表达式进行搜索和替换,而在发现强大的Unix命令行工具(例如)中perlawk或者sed使用一些高级的多行正则表达式相当复杂并且需要各种形式的正则表达式后,我感到非常不满意。很难记住各种情况的语法。

是否有用于Linux的命令行工具,其中使用更复杂的多行正则表达式进行搜索和替换(对于整个文件中的所有匹配项)非常简单:

magicregextool 's/.* > (.*) joined the channel\.\n(((?!.* \1 (was kicked from channel\.|was banned from channel\.)\n).*\n)+?.*\1 disconnected)/\2/' file.txt

即要匹配的正则表达式与我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

应该产生以下输出:

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:38 <user> bye
2016-05-16 06:21:57 > user disconnected

regex匹配包含的任何行,[username] joined the channel在包含该行的下方查找包含该行的行,[username] disconnected 除非这两行之间有a[username] was kicked from channel.[username] was banned from channel.

然后,替换字符串将匹配的模式替换为该行之后的每一行,并[username] joined the channel有效地2016-05-16 06:20:13 > user joined the channel.从上面的输入中删除了该行

您很可能没有任何意义,但这只是一个正则表达式示例,与我最近处理过的正则表达式类似。请记住,我不是在使用上面列出的Unix工具针对此特定问题或类似问题寻找解决方案。我正在寻找一种命令行工具,该工具可以使用未经修改的“搜索”和替换字符串,这些字符串在文本编辑器中使用(尤其是Geany,但实际上并不重要),而无需复杂的语法或要求添加一些编程逻辑即可处理多行“搜索”和替换字符串。

用户名

我不确定为什么Perl在这里不被接受。在您提供的输入上,此行提供了您要求的输出:

perl -0777p -e 's/.* > (.*) joined the channel\.\n(((?!.* \1 (was kicked from channel\.|was banned from channel\.)\n).*\n)+?.*\1 disconnected)/\2/mg' irc.txt

-e参数正好是您的第一个参数,magicregextool除了我添加了/mgregex修饰符。这可能不是“未修改的”,但似乎也不是没有道理的。如果您不想输入整行,那么此脚本如何magicregextool

#!/usr/bin/perl -0777p
BEGIN { $::arg = shift @ARGV; }
eval $arg;

甚至:

#!/bin/sh
perl -0777pe $*

然后,您只需键入:

magicregextool 's/.* > (.*) joined the channel\.\n(((?!.* \1 (was kicked from channel\.|was banned from channel\.)\n).*\n)+?.*\1 disconnected)/\2/mg' irc.txt

这与您的示例相同(同样,除了添加/mg修饰符之外)。

这样做的另一个好处是,如果您在每个文件上运行多个相关的搜索/替换操作,则可以将它们放在同一脚本中:

#!/usr/bin/perl -0777p
s/.* > (.*) joined the channel\.\n(((?!.* \1 (was kicked from channel\.|was banned from channel\.)\n).*\n)+?.*\1 disconnected)/\2/mg;
s/(some other\n)matched text/\1/mg;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在命令行中使用perl风格的正则表达式匹配多行模式?

来自分类Dev

添加几个搜索和替换正则表达式

来自分类Dev

Ruby正则表达式搜索和替换数组

来自分类Dev

ubuntu命令行中的正则表达式

来自分类Dev

Powershell正则表达式多行查找和替换

来自分类Dev

命令行中的正则表达式

来自分类Dev

sed命令以多行进行正则表达式并替换json文件中的元素

来自分类Dev

Perl命令行使用正则表达式跨多行替换文本块

来自分类Dev

命令行工具,可轻松进行多行正则表达式搜索和替换

来自分类Dev

正则表达式搜索和替换数组键

来自分类Dev

ksh命令行上的正则表达式和模式

来自分类Dev

Perl命令行多行正则表达式替代

来自分类Dev

如何在命令行中使用perl风格的正则表达式匹配多行模式?

来自分类Dev

添加几个搜索和替换正则表达式

来自分类Dev

ubuntu命令行中的正则表达式

来自分类Dev

如何使用Windows命令行运行正则表达式查找和替换

来自分类Dev

Vim搜索和替换-正则表达式

来自分类Dev

通过命令行进行Perl正则表达式

来自分类Dev

正则表达式从命令行替换

来自分类Dev

在命令内进行正则表达式搜索

来自分类Dev

命令行Perl正则表达式替换:替换字符串包含utf8

来自分类Dev

Powershell正则表达式多行查找和替换

来自分类Dev

正则表达式多行模式和替换替换

来自分类Dev

正则表达式帮助-搜索和替换

来自分类Dev

Perl命令行使用正则表达式跨多行替换文本块

来自分类Dev

命令行正则表达式删除文件

来自分类Dev

使用命令行和正则表达式确定以句子开头的单词

来自分类Dev

正则表达式匹配命令行输出

来自分类Dev

如何在命令行中使用 perl 替换正则表达式多行 dotall

Related 相关文章

  1. 1

    如何在命令行中使用perl风格的正则表达式匹配多行模式?

  2. 2

    添加几个搜索和替换正则表达式

  3. 3

    Ruby正则表达式搜索和替换数组

  4. 4

    ubuntu命令行中的正则表达式

  5. 5

    Powershell正则表达式多行查找和替换

  6. 6

    命令行中的正则表达式

  7. 7

    sed命令以多行进行正则表达式并替换json文件中的元素

  8. 8

    Perl命令行使用正则表达式跨多行替换文本块

  9. 9

    命令行工具,可轻松进行多行正则表达式搜索和替换

  10. 10

    正则表达式搜索和替换数组键

  11. 11

    ksh命令行上的正则表达式和模式

  12. 12

    Perl命令行多行正则表达式替代

  13. 13

    如何在命令行中使用perl风格的正则表达式匹配多行模式?

  14. 14

    添加几个搜索和替换正则表达式

  15. 15

    ubuntu命令行中的正则表达式

  16. 16

    如何使用Windows命令行运行正则表达式查找和替换

  17. 17

    Vim搜索和替换-正则表达式

  18. 18

    通过命令行进行Perl正则表达式

  19. 19

    正则表达式从命令行替换

  20. 20

    在命令内进行正则表达式搜索

  21. 21

    命令行Perl正则表达式替换:替换字符串包含utf8

  22. 22

    Powershell正则表达式多行查找和替换

  23. 23

    正则表达式多行模式和替换替换

  24. 24

    正则表达式帮助-搜索和替换

  25. 25

    Perl命令行使用正则表达式跨多行替换文本块

  26. 26

    命令行正则表达式删除文件

  27. 27

    使用命令行和正则表达式确定以句子开头的单词

  28. 28

    正则表达式匹配命令行输出

  29. 29

    如何在命令行中使用 perl 替换正则表达式多行 dotall

热门标签

归档