2

我是 Perl 的新手(例如,今天下午才开始使用它),因为我必须处理一些需要将其转换为 .sql 的大而繁琐的文本文件。在完成了几个基本的正则表达式查找/替换操作之后,我使用了以下行:

s/$/');/g;

最后我得到了 300k+ 行,如下所示:

');INSERT INTO `test` VALUES('aa1b','MediaWiki1Deletecomment','1',5609');

哎呀。所以这只是应该把它放在');每行的末尾,但显然我误解了,它把它卡在了行的开头和结尾。所以有几个问题:

  1. 我将如何正确地做到这一点?显然我误会了s/$/');/g;
  2. ');既然我已经在每行的开头插入了 a ,我该如何修复这个文件,我如何有选择地搜索每一行并删除');行首而不是结尾的 ?

这个 Perl/Regex 菜鸟谢谢你!

4

2 回答 2

3

删除这些前导字符的最简单命令是使用.匹配任何字符和一个量词,在每行的开头使用单行重复它三遍:

perl -pe 's/^.{3}//' infile
于 2013-11-07T22:45:25.740 回答
2

-iPerl 有一个通过开关启用的就地编辑工具。在您的情况下使用它,如

$ perl -i.bak -pe "s/$/');/" *.sql

这将使用您的原始代码创建一堆*.sql.bak备份文件,修改后的内容将在您的*.sql文件中。

要更正已经软管的,请运行

$ perl -i.bak -pe "s/^');//" *.sql
于 2013-11-07T23:08:06.567 回答