sed를 사용하여 파일 상단에 줄을 삽입하는 방법은 무엇입니까?

sed를 사용하여 파일 상단에 줄을 삽입하는 방법은 무엇입니까?

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가 언급한 값의 백슬래시 문제를 우회합니다.

관련 정보