Perl one liner在Perl脚本中不起作用
我正试图使用perl脚本中的一行代码从文件-list.txt中删除字符串@my.mail.com。 (Perl脚本从windows server启动) 以下是我在perl脚本内部调用时尝试的选项:Perl one liner在Perl脚本中不起作用,perl,Perl,我正试图使用perl脚本中的一行代码从文件-list.txt中删除字符串@my.mail.com。 (Perl脚本从windows server启动) 以下是我在perl脚本内部调用时尝试的选项: `perl -pi.bak -e 's/\s+\@my\.mail\.com\s+//g;' D:\\myfolder\\list.txt`; system("perl -pi.bak -e 's/\s+\@my\.mail\.com\s+//g;' D:\\myfolder\\list.txt")
`perl -pi.bak -e 's/\s+\@my\.mail\.com\s+//g;' D:\\myfolder\\list.txt`;
system("perl -pi.bak -e 's/\s+\@my\.mail\.com\s+//g;' D:\\myfolder\\list.txt");
system( q( perl -l -pi.bak -e 's/\s+\@my\.mail\.com\s+//g;' D:\\myfolder\\list.txt ) );
我期待这样的结果
r12355 test@my.mail.com
r29555 test@my.mail.com
r29555 trial@my.mail.com
r295721 xxx@my.mail.com
r295722 yyyy@my.mail.com
r295140 test@my.mail.com
r295145 test@my.mail.com
不确定我是否遗漏了一些愚蠢的东西,任何意见都非常感谢。提前谢谢 这里有两个问题。首先,您在文件路径中转义了反斜杠,但在正则表达式模式中没有转义,其次,您在
-e
选项的参数周围使用了单引号,Windows不会将其识别为分隔符
这种变化应该适合你。它使用单引号(实际上是q{…}
)来保护反斜杠,因此不需要转义任何内容
system q{perl -pi.bak -e "s/\s+\@my\.mail\.com\s+//g" D:\myfolder\list.txt};
但是,从perl程序中向外剥离到另一个perl进程是一种糟糕的做法。通过添加这个,可以直接在主代码中完成,这样可读性更高,不容易出错
{
local @ARGV = 'D:\myfolder\list.txt';
local $^I = '.bak';
while ( <> ) {
s/\s+\@my\.mail\.com\s+//g;
print;
}
}
{
local@ARGV='D:\myfolder\list.txt';
本地$^I='.bak';
而(){
s/\s+\@my\.mail\.com\s+//g;
印刷品;
}
}
这里有两个问题。首先,您在文件路径中转义了反斜杠,但在正则表达式模式中没有转义,其次,您在-e
选项的参数周围使用了单引号,Windows不会将其识别为分隔符
这种变化应该适合你。它使用单引号(实际上是q{…}
)来保护反斜杠,因此不需要转义任何内容
system q{perl -pi.bak -e "s/\s+\@my\.mail\.com\s+//g" D:\myfolder\list.txt};
但是,从perl程序中向外剥离到另一个perl进程是一种糟糕的做法。通过添加这个,可以直接在主代码中完成,这样可读性更高,不容易出错
{
local @ARGV = 'D:\myfolder\list.txt';
local $^I = '.bak';
while ( <> ) {
s/\s+\@my\.mail\.com\s+//g;
print;
}
}
{
local@ARGV='D:\myfolder\list.txt';
本地$^I='.bak';
而(){
s/\s+\@my\.mail\.com\s+//g;
印刷品;
}
}
我可以建议:不要。只需编写一些perl,不要使用perl在第二个和第三个示例中使用“mgd”而不是“my”。此外,我认为您可能需要在第一个和第二个示例中使用\\\\@my
,因为使用了双插值(反勾号/引号和s///
)@Markus Laire:对不起,编辑了这个问题。键入如果您的文件需要简单的操作,您可以使用像vim这样的文本编辑器来执行此类操作。我建议您不要这样做。只需编写一些perl,不要使用perl在第二个和第三个示例中使用“mgd”而不是“my”。此外,我认为您可能需要在第一个和第二个示例中使用\\\\@my
,因为使用了双插值(反勾号/引号和s///
)@Markus Laire:对不起,编辑了这个问题。键入如果您的文件需要简单的操作,您可以使用vim之类的文本编辑器来执行此类操作。非常好,谢谢。以及最佳实践建议!太好了,非常感谢。以及最佳实践建议!