여기에서 흥미로운 토론을 발견하고 주어진 솔루션을 시도했습니다.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