所以我知道有很多方法可以做我要求的事情,但我发现的所有方法并没有帮助我做我想做的事情。 它应该是使用stdin和stdout的简单查找和替换脚本。 我有一个名为replace.pl的脚本,这就是我所拥有的:
#!/usr/bin/perl
use strict;
use warnings;
while(<STDIN>){
$_ = s/$ARGV[0]/$ARGV[1]/g;
print STDOUT $_;
}
当我运行echo "replace a with b please" | replace.pl 'a' 'b'
时
我得到的只是一个“1”。我的愿望输出是“用b替换b”但是我试图做什么,它没有改变它。谁能告诉我这里我做错了什么?
答案 0 :(得分:3)
尝试
s/$ARGV[0]/$ARGV[1]/g;
而不是
$_ = s/$ARGV[0]/$ARGV[1]/g;
当替换成功时s///
返回1。
如果它应该是文字字符串(不是正则表达式),您也可以引用搜索模式,
s/\Q$ARGV[0]\E/$ARGV[1]/g;
答案 1 :(得分:1)
来自perlop
:
<强> S / PATTERN / REPLACEMENT / msixpodualgcer 强>
在字符串中搜索模式,如果找到,则用替换文本替换该模式,返回替换次数。否则返回false(特别是空字符串)。
这就是代码设置$_ = 1
的原因。您只需要s/$ARGV[0]/$ARGV[1]/g;
替换副作用,而不将其返回值分配给$_
。
while (<STDIN>) {
s/$ARGV[0]/$ARGV[1]/g;
print;
}