如果使用分组元字符,search和replace regexp将提供两种不同的输出
我从perl中的search和replace regexp获得不同的输出,这取决于我是使用就地替换()还是常规搜索替换,还取决于我是使用如果使用分组元字符,search和replace regexp将提供两种不同的输出,regex,perl,sed,Regex,Perl,Sed,我从perl中的search和replace regexp获得不同的输出,这取决于我是使用就地替换()还是常规搜索替换,还取决于我是使用\1还是$1: ──> cat test1.txt orig.avg.10 ──> cat test2.txt orig.avg.10 # EXPECTED ──> cat test1.txt | perl -lne '$_ =~ s/(avg\.[0-9]+)/$1\.vec/; print $_' orig.avg.10.vec
\1
还是$1
:
──> cat test1.txt
orig.avg.10
──> cat test2.txt
orig.avg.10
# EXPECTED
──> cat test1.txt | perl -lne '$_ =~ s/(avg\.[0-9]+)/$1\.vec/; print $_'
orig.avg.10.vec
# EXPECTED
──> cat test1.txt | perl -lne '$_ =~ s/(avg\.[0-9]+)/\1\.vec/; print $_'
orig.avg.10.vec
# EXPECTED
──> perl -p -i.bak -e "s/(avg\.[0-9]+)/\1\.vec/" test2.txt
──> cat test2.txt
orig.avg.10.vec
# UNEXPECTED
──> perl -p -i.bak -e "s/(avg\.[0-9]+)/$1\.vec/" test1.txt
──> cat test1.txt
orig..vec
为什么会发生这种情况?您正在使用“
包装perl代码,但这样做意味着shell可以并且将插入$1
。
改用
”
,一切都会按预期进行。问题是,我在“意外情况”中使用了双引号,这使得展开$1
变了。有时,人们需要在意识到情况之前写下问题