![sed 마지막 줄 앞에 변수 삽입](https://rvso.com/image/1558663/sed%20%EB%A7%88%EC%A7%80%EB%A7%89%20%EC%A4%84%20%EC%95%9E%EC%97%90%20%EB%B3%80%EC%88%98%20%EC%82%BD%EC%9E%85.png)
마지막 줄 앞에 변수를 삽입하고 싶습니다.
이것은 내 파일입니다.
$ cat file.txt
one
two
three
four
five
변수를 사용하지 않고 시도하면 잘 작동합니다.
$ sed -i '$i name' file.txt
$ cat file.txt
one
two
three
four
name
five
변수를 사용하면 작동하지 않습니다. 큰따옴표와 백슬래시를 다양하게 조합해 보았습니다.
$ NAME=name
$ sed -i '$i "$NAME"' file.txt
$ cat file.txt
one
two
three
four
"$NAME"
five
답변1
에서 bash
작은따옴표는 고정된 리터럴 문자열을 위한 것입니다. 변수 보간, 명령 대체 등을 수행하려는 경우 큰따옴표를 사용합니다.
명령 은 sed
리터럴을 모두 사용해야 합니다 ( 명령이 파일의 마지막 줄에 적용 $
되도록 ).i
그리고 $NAME
변수를 보간합니다. 이렇게 하려면 $
백슬래시를 사용하여 리터럴을 "이스케이프"해야 합니다. 그래야 쉘이 sed 스크립트의 "리터럴 뒤에 리터럴이 $i
오는" 대신 "변수 $i의 내용으로 대체"로 해석되지 않습니다 .$
i
그런데, 옵션을 사용하지 않고 이와 같은 것을 테스트하는 것이 더 낫습니다 -i
. 그러면 sed
올바른 구문을 알아내는 동안 입력 파일이 엉망이 되지 않습니다. -i
나중에 원하는 작업이 정확히 수행되고 있다고 확신할 때 추가하세요 .
$ NAME=name
$ sed "\$i $NAME" file.list
one
two
three
four
name
five
답변2
또 다른 방법:
$ NAME=name
$ sed '$i '"$NAME" file.list
one
two
three
four
name
five