파일 시작 부분에 이것을 추가할 수 있습니다.
sed -i '1s/^/word\n/' file
그래요읽다큰따옴표를 사용하면 변수를 확장할 수 있으므로 다음을 시도합니다.
sed -i "1s/^/$(printenv)\n/" file
나는 결국 돌아왔다:
sed: -e expression #1, char 15: unterminated `s' command
무슨 일이야? 변수의 내용이나 다른 것과 관련이 있습니까?
답변1
나는 다음이 효과가 있다고 생각합니다.
sed -i '1 e printenv' file
GNU sed 매뉴얼에서:
'e COMMAND'
Executes COMMAND and sends its output to the output stream. The
command can run across multiple lines, all but the last ending with
a back-slash.
또는 를 사용할 수 있지만 cat
이를 위해서는 임시 파일을 만들어야 합니다.
cat <(printenv) file > temporary_file; mv temporary_file file
패키지가 컴퓨터에 설치된 경우 moreutils
다음 명령을 사용하면 임시 파일을 수동으로 생성하는 것을 방지할 수 있습니다 sponge
.
cat <(printenv) file | sponge file
답변2
콘텐츠 삽입앞으로라인 1:
ed -s file <<< $'0r !printenv\nwq'
콘텐츠 삽입뒤쪽에라인 1:
ed -s file <<< $'1r !printenv\nwq'
답변3
OP의 질문에 더 직접적으로 대답하려면 예, 서브 쉘이 출력하는 것과 관련이 있습니다. Bash가 인식하고 큰따옴표 안에 의미를 유지하는 특수 문자는 셸에서 잘못 해석되어 printenv
많은 문제를 일으킬 것입니다. 이 오류의 가장 가능성 있는 원인 unterminated 's'
은 값이 printenv
여러 줄 길이이고 sed
s 명령이 해당 줄 끝에서 완료될 것으로 예상되기 때문입니다. 이 명령으로 바꾸려는 것은 무엇이든 특수 문자를 제거하거나 이스케이프하고 리터럴 s 로 sed
바꾸는 등의 작업을 전처리해야 합니다 .newlines
\n