![sed를 사용하여 쉘 변수에 저장된 텍스트를 파일 시작 부분에 추가하려면 어떻게 해야 합니까?](https://linux55.com/image/185875/sed%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%89%98%20%EB%B3%80%EC%88%98%EC%97%90%20%EC%A0%80%EC%9E%A5%EB%90%9C%20%ED%85%8D%EC%8A%A4%ED%8A%B8%EB%A5%BC%20%ED%8C%8C%EC%9D%BC%20%EC%8B%9C%EC%9E%91%20%EB%B6%80%EB%B6%84%EC%97%90%20%EC%B6%94%EA%B0%80%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
여기에서 흥미로운 토론을 발견하고 주어진 솔루션을 시도했습니다.sed
파일 시작 부분에 텍스트를 삽입하는 방법은 무엇입니까?
일반 텍스트에는 작동하지만 변수에 텍스트를 저장하는 데에는 작동하지 않습니다.
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을 사용하고 있습니다:$var
sed
sed
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