使用perl将文件中的变量内容替换为另一个变量内容
replace a variable content with another variable content in a file using perl
我正在编写一个 shell 脚本来替换一个整数变量内容,在 shell 脚本中使用 perl。
#!/bin/sh
InitialFileStep=""
CurrentStage=$((($i*(9*4000))+$InitialFileStep))
PreviousStage=$((($(($(($i-1))*(9*4000)))) + (InitialFileStep)))
perl -pi -e 's/$PreviousStage/$CurrentStage/g' file.txt
echo "Hey!"
似乎无法在文件中找到变量内容。
我不知道是什么问题,是因为变量是整数而不是字符串吗?
shell 不解释单引号内的任何内容。 '$ThisIsASimpleStringForTheShell'
所以尝试:
perl -pi -e 's/'"$PreviousStage"'/'"$CurrentStage"'/g' file.txt
双引号防止可能的空格弄乱你的命令。
混合使用单引号和双引号使您可以在命令中添加正则表达式运算符,从而防止 shell 在 perl 之前解释它们。此命令仅当 $PreviousStage
的内容单独出现在一行中时,才将 $PreviousStage
的内容替换为 $CurrentStage
的内容:
perl -pi -e 's/^'"$PreviousStage"'$/'"$CurrentStage"'/g' file.txt
变量只存在于您的shell脚本中;你不能直接在你的 Perl 脚本中使用它们。
我讨厌尝试从 shell 生成 Perl 代码,就像以前的解决方案所建议的那样。疯狂就在于此(尽管它在这里起作用,因为您只是在处理整数)。相反,将值作为参数或其他方式传递。
perl -i -pe'BEGIN { $S = shift; $R = shift; } s/\Q$S/$R/g' \
"$PreviousStage" "$CurrentStage" file.txt
或
export PreviousStage
export CurrentStage
perl -i -pe's/\Q$ENV{PreviousStage}/$ENV{CurrentStage}/g' file.txt
或
S="$PreviousStage" R="$CurrentStage" perl -i -pe's/\Q$ENV{S}/$ENV{R}/g' file.txt
我正在编写一个 shell 脚本来替换一个整数变量内容,在 shell 脚本中使用 perl。
#!/bin/sh
InitialFileStep=""
CurrentStage=$((($i*(9*4000))+$InitialFileStep))
PreviousStage=$((($(($(($i-1))*(9*4000)))) + (InitialFileStep)))
perl -pi -e 's/$PreviousStage/$CurrentStage/g' file.txt
echo "Hey!"
似乎无法在文件中找到变量内容。 我不知道是什么问题,是因为变量是整数而不是字符串吗?
shell 不解释单引号内的任何内容。 '$ThisIsASimpleStringForTheShell'
所以尝试:
perl -pi -e 's/'"$PreviousStage"'/'"$CurrentStage"'/g' file.txt
双引号防止可能的空格弄乱你的命令。
混合使用单引号和双引号使您可以在命令中添加正则表达式运算符,从而防止 shell 在 perl 之前解释它们。此命令仅当 $PreviousStage
的内容单独出现在一行中时,才将 $PreviousStage
的内容替换为 $CurrentStage
的内容:
perl -pi -e 's/^'"$PreviousStage"'$/'"$CurrentStage"'/g' file.txt
变量只存在于您的shell脚本中;你不能直接在你的 Perl 脚本中使用它们。
我讨厌尝试从 shell 生成 Perl 代码,就像以前的解决方案所建议的那样。疯狂就在于此(尽管它在这里起作用,因为您只是在处理整数)。相反,将值作为参数或其他方式传递。
perl -i -pe'BEGIN { $S = shift; $R = shift; } s/\Q$S/$R/g' \
"$PreviousStage" "$CurrentStage" file.txt
或
export PreviousStage
export CurrentStage
perl -i -pe's/\Q$ENV{PreviousStage}/$ENV{CurrentStage}/g' file.txt
或
S="$PreviousStage" R="$CurrentStage" perl -i -pe's/\Q$ENV{S}/$ENV{R}/g' file.txt