Using 1
, 2
, etc in the replacement expression is wrong. 1
is a regular expression pattern that means "match what the first capture matched" which makes no sense in a replacement expression. Regular expression patterns should not be used outside of regular expressions! $1
, $2
, etc is what you should be using there.
After fixing 1
, you have
perl ... -e'... s/.../...$1$varWithLeadingNumber.../ ...'
That said, I think varWithLeadingNumber
is supposed to be a shell variable? You shouldn't have any problems if it's a Perl variable. If you're having the shell interpolate varWithLeadingNumber
, the problem can be fixed using
perl ... -e"... s/.../...${1}${varWithLeadingNumber}.../ ..."
Note that you will have problems if $varWithLeadingNumber contains "$", "@", "" or "/", so you might want to use a command line argument instead of interpolation.
perl ... -pe'
BEGIN { $val = shift; }
... s/.../...$1$val.../ ...
' "${varWithLeadingNumber}"
You could also use an environment variable.
export varWithLeadingNumber
perl ... -pe's/.../...$1$ENV{varWithLeadingNumber}.../'
or
varWithLeadingNumber=varWithLeadingNumber
perl ... -pe's/.../...$1$ENV{varWithLeadingNumber}.../'
If you did have a 1
s/...1.../.../
you can avoid the problem a number of ways including
s/...(?:1).../.../
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…