sed를 사용하여 쉘 변수에 저장된 텍스트를 파일 시작 부분에 추가하려면 어떻게 해야 합니까?

sed를 사용하여 쉘 변수에 저장된 텍스트를 파일 시작 부분에 추가하려면 어떻게 해야 합니까?

여기에서 흥미로운 토론을 발견하고 주어진 솔루션을 시도했습니다.sed

파일 시작 부분에 텍스트를 삽입하는 방법은 무엇입니까?

https://stackoverflow.com/a/9533736/13353532

일반 텍스트에는 작동하지만 변수에 텍스트를 저장하는 데에는 작동하지 않습니다.

wolf@linux:~$ cat file.txt 
1
2
3
wolf@linux:~$ 

<added text>파일 시작 부분에 텍스트( )를 추가합니다.

wolf@linux:~$ sed -i '1s/^/<added text>\n/' file.txt
wolf@linux:~$ 

효과가있다!

wolf@linux:~$ cat file.txt 
<added text>
1
2
3
wolf@linux:~$ 

그러나 변수를 사용하여 시도하면 더 이상 작동하지 않습니다.

wolf@linux:~$ var='Text 1'
wolf@linux:~$ echo $var
Text 1
wolf@linux:~$ 

wolf@linux:~$ cat file.txt 
1
2
3
wolf@linux:~$ sed -i '1s/^/"$var"\n/' file.txt
wolf@linux:~$ cat file.txt 
"$var"
1
2
3
wolf@linux:~$ 

제외하고 , 명령 에서 실제 값을 "$var"어떻게 호출합니까 ? 저는 GNU 4.7을 사용하고 있습니다:$varsedsed

sed (GNU sed) 4.7 Packaged by Debian
Copyright (C) 2018 Free Software Foundation, Inc.

답변1

문제는 제안된 대로 sed설명을 작은따옴표로 묶었 다는 것입니다 ' ... '. 그러나 작은따옴표 안에는변수 확장이 $var비활성화되었습니다 ., 표현은 그대로 유지됩니다.

해결책으로 설명을 큰따옴표로 묶을 수 있습니다.

sed -i "1s/^/$var\n/" file.txt

하지만 이 목적에는 "insert" 명령을 사용하는 것이 좋습니다.

sed -i "1i $var" file.txt

내용은 행 1 앞에 삽입됩니다 $var.

편집하다

@DigitalTrauma가 주석에서 올바르게 지적했듯이 (원치 않는) 확장으로부터 "변수를 제외한 모든 것"을 보호하려면 혼합 참조와 함께 연결된 문자열 매개 변수를 사용할 수 있지만 s명령에서는 불가능합니다. 예제의 주요 매개 변수 이다:

sed -i 's/^/'"$var"'\n/' file.txt

관련 정보