【发布时间】:2013-11-19 19:36:19
【问题描述】:
我是 Perl 的新手(例如,今天下午才开始使用它),因为我必须处理一些需要将其转换为 .sql 的大而繁琐的文本文件。在完成了几个基本的正则表达式查找/替换操作后,我使用了以下行:
s/$/');/g;
我最终得到了 300k+ 行,如下所示:
');INSERT INTO `test` VALUES('aa1b','MediaWiki1Deletecomment','1',5609');
哎呀。所以这只是应该把'); 放在每行的末尾,但显然我误解了,它把它卡在了行的开头和结尾。所以有几个问题:
- 我将如何正确地做到这一点?显然我误解了
s/$/');/g; - 既然我在每行的开头插入了一个
');,我该如何修复这个文件,我如何有选择地搜索每一行并删除行开头而不是结尾的');?
这个 Perl/Regex 菜鸟谢谢你!
【问题讨论】:
-
您的模式对于将
');附加到每行的末尾是正确的,但/g开关是不必要的。你用[mysql]标记了这个问题,所以假设你在一些类Unix平台上运行是否安全? -
是的,我是。我想我误解了 /g 实际服务的功能。
-
要修复您的文件,您可以在每一行运行
s/^'\);//;。 -
你是如何阅读文本文件的?
open后跟while (<$fh>) { ... }或其他不同的东西?您是否更改了 Perl 的输入记录分隔符$/的值?你是怎么写输出的? -
我有一个我写的 .pl 文件,它打开并写入一个 .txt 文件。然后我只是有一个 foe 循环,它遍历文本文件的每一行并应用我要执行的任何正则表达式。因此,例如: for (@lines) { s/$/');/g;打印;然后我通过终端运行 .pl 文件。
标签: mysql regex perl replace find