Amazon Linux에서 bash 쉘을 사용하고 있습니다. 파일 상단에 줄을 삽입하려고 하므로
header_line="first_line_of_file"
...
sed -i "1 i\$header_line" /tmp/$file_title
하지만 실제로 내 파일 상단에 나타나는 내용은 다음과 같습니다.
$header_line
sed에게 내 변수를 문자 그대로 해석하지 않고 대신 변수의 값을 사용하여 파일 상단에 삽입하도록 지시하려면 어떻게 해야 하나요?
답변1
GNU 또는 를 사용하는 경우 다음 을 수행할 수 있어야 합니다 busybox
.sed
sed -i "1i $header_line" "/tmp/$file_title"
당신이 겪고있는 문제는 $
쉘에서 탈출하여 변수로 인식되지 않는다는 것입니다 $header_line
.
NetBSD 또는 OpenBSD 사용 sed
(FreeBSD 및 macOS에서도 작동하지만 -i
및 사이에 공백이 필요함 ''
):
sed -i'' "1i\\
$header_line
" "/tmp/$file_title"
BSD는 sed
레거시 sed
구현과 마찬가지로 POSIX에 따라 command \
뒤에 하나의 리터럴 줄 바꿈이 필요하며 i
큰따옴표를 사용하므로 \
셸에서 이스케이프해야 합니다.
또 다른 옵션은 다음을 사용하는 것입니다 cat
.
printf '%s\n' "$header_line" | cat - "/tmp/$file_title" >new_file && mv new_file "/tmp/$file_title"
$header_line
이는 또한 아래 설명에서 Stéphane Chazelas가 언급한 값의 백슬래시 문제를 우회합니다.