行を変更しようとしたときにパラメータをPerlに渡すにはどうすればよいですか?

行を変更しようとしたときにパラメータをPerlに渡すにはどうすればよいですか?

で提案した方法を使用しています。https://askubuntu.com/questions/434051/how-to-replace-a-string-on-the-5th-line-of-multiple-text-filesアーカイブの最初の行を修正します。最初の行file.txtは次のように見なされます。

keepme=change1me

欲しい

keepme=newstring

問題は、newstringがvar1に格納されることです。

私は試した:

var1=newstring
perl -i -pe 's/(keepme=)(.*)/$1${var1}/ if $.==1' ../file.txt
perl ${var1} -i -pe 's/(keepme=)(.*)/$1$ARGV[0]/ if $.==1' ../file.txt

どちらの場合も、結果は次のようになります。

keepme=

もし私がするなら

perl -i -pe ${var1} 's/(keepme=)(.*)/$1$ARGV[0]/ if $.==1' ../file.txt
Can't open s/(genome1=)(.*)/$1$ARGV[0]wq/ if $.==1: No such file or directory

ベストアンサー1

Perlで環境変数にアクセスするには、$ENV{var1}を使用してください。

これを行うには、変数をエクスポートできます。つまり、設定を解除するまで変数が設定されます。

エクスポート var1=新しい文字列

perl -i -pe 's/(keepme=)(.*)/$1$ENV{var1}/ if $.==1' ../file.txt

または、Perlコマンドの実行時に使用する変数を設定したい場合は、コマンドの前に割り当てることができます。

var1=newstring2 perl -i -pe 's/(keepme=)(.*)/$1$ENV{var1}/ if $.==1' ../file.txt

おすすめ記事