Amazon Linux에서 bash 셸을 사용하고 있습니다. 내 파일 맨 위에 줄을 삽입하려고합니다.
header_line="first_line_of_file"
...
sed -i "1 i\$header_line" /tmp/$file_title
그러나 실제로 내 파일 상단에 나타나는 것은
$header_line
sed에게 내 변수를 문자 그대로 해석하지 않고 변수의 값을 사용하여 파일 맨 위에 삽입하도록 어떻게 지시합니까?
GNU 또는 busybox
,을 사용하는 경우 sed
다음을 수행 할 수 있습니다.
sed -i "1i $header_line" "/tmp/$file_title"
당신이 가진 문제 $
는 셸에서 이스케이프하여 $header_line
변수로 인식하지 못하기 때문 입니다.
NetBSD의 또는 오픈 BSD로 sed
(또한 FreeBSD의와 맥 OS에 있지만 사이에 공간이 필요 -i
하고 ''
이를)
sed -i'' "1i\\
$header_line
" "/tmp/$file_title"
BSD sed
는 기존 sed
구현과 마찬가지로 POSIX에서 지정한대로 명령 \
뒤에 a 및 리터럴 개행 문자 i
가 필요하며 이중 인용이므로 \
셸 에서을 이스케이프해야합니다 .
대안은 다음을 사용하는 것입니다 cat
.
printf '%s\n' "$header_line" | cat - "/tmp/$file_title" >new_file && mv new_file "/tmp/$file_title"
이것은 또한 $header_line
아래 주석에서 Stéphane Chazelas 가 언급 한 값의 백 슬래시 문제를 우회 합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다