줄을 변경하려고 할 때 매개변수를 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

답변2

${var1}첫 번째 시도부터 쉘에 의해 확장되고 다른 모든 변수를 보호하기 를 원합니다 $(Perl이 확장하도록).

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

작은 따옴표 대신 큰 따옴표를 사용하면 Perl은 newstring변수 대신 변수 이름을 받게 되며, 백슬래시를 사용하여 다른 달러 기호를 이스케이프 처리하면 쉘이 해당 이름을 영향 없이 전달하게 됩니다.

관련 정보