仅在行的开头查找和替换

时间:2013-11-07 22:35:00

标签: mysql regex perl replace find

我是Perl的新手(就像在今天下午刚开始玩它一样)因为我不得不处理一些需要转入.sql的大型,繁琐的文本文件。在完成几个基本的正则表达式查找/替换操作之后,我使用了以下行:

s/$/');/g;

我最终获得了300k +行,看起来像这样:

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

糟糕。所以这只是将');放在每一行的END处,但显然我误解了它并且它在行的开头和结尾都停留了。所以有几个问题:

  1. 我怎么能正确地做到这一点?显然我误解了s/$/');/g;
  2. 如果我在每行的开头插入了');,如何修复此文件,如何有选择地搜索每一行并删除该行开头的');而不是结束?
  3. 这个Perl / Regex noob谢谢你!

2 个答案:

答案 0 :(得分:3)

删除这些主要字符的最简单命令是使用.来匹配任何字符和量词,在每行的开头用一行代码重复三次:

perl -pe 's/^.{3}//' infile

答案 1 :(得分:2)

Perl使用-i开关启用了就地编辑工具。在您的情况下使用它,如

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

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

要纠正已经冲过的那些,请运行

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