sed 마지막 줄 앞에 변수 삽입

sed 마지막 줄 앞에 변수 삽입

마지막 줄 앞에 변수를 삽입하고 싶습니다.

이것은 내 파일입니다.

$ 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

관련 정보