스크립트의 sed 대체 오류

스크립트의 sed 대체 오류

파일의 일부 단어를 바꾸는 스크립트를 작성 중입니다. 줄을 (파일 이름의 첫 번째 부분).fastq.gz로 변경하고 싶습니다.

나는 가지고있다

파일 입력용ls /pathway *.sam | sort | uniq

sed -i "s/VFC-00012-02.fastq.gz/${filename}.fastq.gz/g" $file 실행

완벽한

이 스크립트를 실행한 후 빈 섹션이 나타납니다.

내가 원함(파일명 B(B.extensions))

B.fastq.gz본문에서

sed 명령 후

나는이 문제를 다음의 도움으로 해결했습니다. https://askubuntu.com/questions/1011839/how-do-i-use-file-names-in-a-sed-command

답변1

닫는 작은따옴표 뒤에는 공백이 필요합니다. 그렇지 않으면 쉘은 파일 이름을 대체의 일부로 해석합니다.

sed -i 's/VFC-00012-02.fastq.gz/$filename.fastq.gz/' "$file"

토큰화되지 않도록 변수 주위에 큰따옴표를 두는 것이 좋습니다.

반면에,아니요변수($filename)를 큰따옴표로 묶는 것은 변수가 전혀 확장되지 않음을 의미합니다. 즉, 파일에 리터럴 달러 기호가 포함됩니다. 이것이 당신이 원하는 것인지 잘 모르겠습니다.

$filename을 확장하기 위해 큰따옴표로 전환할 수 있지만 sed 특수 문자가 포함될 수 있는지 주의해야 합니다. sed가 인수를 보기 전에 쉘이 변수를 확장하므로 sed는 해당 문자가 원본에서 어디서 왔는지 알 수 없기 때문입니다. 변하기 쉬운.

관련 정보