【发布时间】:2012-08-05 04:29:18
【问题描述】:
我想将多个单行列移动到一个脚本中。
例如:
perl -i.bak -pE "s/String_ABC/String_XYZ/g" Cities.Txt
perl -i.bak -pE "s/Manhattan/New_England/g" Cities.Txt
以上方法对我来说效果很好,但代价是两次磁盘 I/O 操作。
我想将上述逻辑移动到单个脚本中,以便所有替换都在文件打开和编辑一次的情况下完成。
EDIT1:根据您的建议,我在一个脚本中编写了这个 sn-p,当从 Windows 批处理文件调用该脚本时,它只会挂起:
#!/usr/bin/perl -i.bak -p Cities.Txt
use strict;
use warnings;
while( <> ){
s/String_ABC/String_XYZ/g;
s/Manhattan/New_England/g;
print;
}
EDIT2:好的,这就是我实施您的建议的方式。像魅力一样工作!
批处理文件:
perl -i.bal MyScript.pl Cities.Txt
MyScript.pl
#!/usr/bin/perl
use strict;
use warnings;
while( <> ){
s/String_ABC/String_XYZ/g;
s/Manhattan/New_England/g;
print;
}
非常感谢所有做出贡献的人。
【问题讨论】:
-
你确实意识到你可以使用一个单行,对吧?
perl -i.bak -pE "s/String_ABC/String_XYZ/g;s/Manhattan/New_England/g" Cities.Txt -
是的,但是我有 60 多个替换要执行并且通过命令行传递它们是站不住脚的。
标签: string perl substitution