有人可以向我解释,为什么这不起作用:
# echo '"Hello,1" "Hello,2" "Hello,3"' | perl -pe 's/".+?,3"/1/'
1
或
# echo '"Hello,1" "Hello,2" "Hello,3"' | perl -pe 's/".+?,2"/1/'
1 "Hello,3"
我的意图是更换/只找到"你好,3" /"你好,2",但似乎非贪婪的修饰符(或我的大脑)不起作用如预期的那样。
答案 0 :(得分:2)
我认为你误解了正则表达式,但实际上我可能建议稍微改变一下。如果您要操作一系列字词,我建议您使用split
/ join
/ map
进行操作。
我认为它可以更好地扩展,并且在模式匹配边界所在的清晰度问题上不会绊倒。
这样的事情:
my $str = '"Hello,1" "Hello,2" "Hello,3"';
$str = join ( " ", map { s/Hello,[23]/1/r } split ( " ", $str ) );
print $str;
或作为一个班轮:
perl -ape "/Hello/ and $_ = join ' ', map { s/Hello,[23]/1/r } @F"
答案 1 :(得分:1)