Perl 字符串替换为反向引用值和 shell 变量
Perl string replace with backreferenced values and shell variables
比方说 'pm.max_children = 8' 文件 '/usr/local/etc/php-fpm.d/www.conf'
下面的结果应该是 40 但 $1 被忽略了。
aaa=5
perl -i.bak -e "s/pm.max_children\s*=\s*\K([0-9]+)/( * $aaa)/ge" /usr/local/etc/php-fpm.d/www.conf
但奇怪的是以下是有效的,以防 $aaa 不是变量。
perl -i.bak -e "s/pm.max_children\s*=\s*\K([0-9]+)/( * 3)/ge" /usr/local/etc/php-fpm.d/www.conf
</code> 的含义在 shell 和 Perl 中是不同的。</p>
<p>在shell中表示第一个位置参数。由于双引号扩展变量,双引号中的 <code>
也表示第一个位置参数。
在Perl中,</code>表示第一个被正则表达式匹配的捕获组。</p>
<p>但是,如果你在 shell 级别上用双引号括起 <code>
,Perl 永远不会看到它:shell 将 </code> 扩展为第一个位置参数,并且将扩展后的字符串发送到 Perl。</p>
<p>您可以在 Perl 中使用 <code>%ENV
散列来引用环境变量:
aaa=5 perl -i.bak -pe 's/pm.max_children\s*=\s*\K([0-9]+)/( * $ENV{aaa})/ge' /usr/local/etc/php-fpm.d/www.conf
比方说 'pm.max_children = 8' 文件 '/usr/local/etc/php-fpm.d/www.conf' 下面的结果应该是 40 但 $1 被忽略了。
aaa=5
perl -i.bak -e "s/pm.max_children\s*=\s*\K([0-9]+)/( * $aaa)/ge" /usr/local/etc/php-fpm.d/www.conf
但奇怪的是以下是有效的,以防 $aaa 不是变量。
perl -i.bak -e "s/pm.max_children\s*=\s*\K([0-9]+)/( * 3)/ge" /usr/local/etc/php-fpm.d/www.conf
</code> 的含义在 shell 和 Perl 中是不同的。</p>
<p>在shell中表示第一个位置参数。由于双引号扩展变量,双引号中的 <code>
也表示第一个位置参数。
在Perl中,</code>表示第一个被正则表达式匹配的捕获组。</p>
<p>但是,如果你在 shell 级别上用双引号括起 <code>
,Perl 永远不会看到它:shell 将 </code> 扩展为第一个位置参数,并且将扩展后的字符串发送到 Perl。</p>
<p>您可以在 Perl 中使用 <code>%ENV
散列来引用环境变量:
aaa=5 perl -i.bak -pe 's/pm.max_children\s*=\s*\K([0-9]+)/( * $ENV{aaa})/ge' /usr/local/etc/php-fpm.d/www.conf