Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果使用分组元字符,search和replace regexp将提供两种不同的输出_Regex_Perl_Sed - Fatal编程技术网

如果使用分组元字符,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

我从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

# 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
变了。有时,人们需要在意识到情况之前写下问题