Files
嘗試更改行時如何將參數傳遞給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
從您的第一次嘗試開始,您希望
${var1}
通過 shell 擴展,並且所有其他$
變數都不受它的保護(以便 Perl 擴展它們):perl -i -pe "s/(keepme=)(.*)/\$1${var1}/ if \$. == 1" ../file.txt
雙引號,而不是單引號,使得 Perl 接收
newstring
而不是變數名,並且用反斜杠轉義其他美元符號使 shell 不受影響地通過它們。
要在 Perl 中訪問環境變數,您可以使用 $ENV{var1}。
為此,您可以導出變數,這意味著變數已設置,直到您取消設置:
導出 var1=newstring
perl -i -pe ’s/(keepme=)(.*)/ $ 1 $ ENV{var1}/ 如果 $.==1’ ../file.txt
或者,如果您只想設置 Perl 命令在執行時使用的變數,您可以在命令前面指定它:
var1=newstring2 perl -i -pe ’s/(keepme=)(.*)/ $ 1 $ ENV{var1}/ 如果 $.==1’ ../file.txt