Bash 스크립트의 sed 변수가 종료되지 않은 오류를 반환합니다.

Bash 스크립트의 sed 변수가 종료되지 않은 오류를 반환합니다.

파일의 첫 번째 줄을 다른 파일의 전체 내용으로 바꿔야 합니다. 내가 뭘 놓치고 있는지 알아?

$ cat old.txt
---
foo
bar

$ cat append.txt
---
123
<321>

$ cat process.sh
old=old.txt
append=append.txt
sed -i "1s/.*/$append/" $old
cat $old

기대했다

$ bash process.sh
---
123
<321>
foo
bar

비록 내가 얻었지만

sed: -e expression #1, char 9: unterminated `s' command

내 스크립트에서 변수를 사용하여 sed를 시도할 때

이것이 작동하는 동안(변수 없음) sed -i "1s/.*/loremipsum/" $old

답변1

첫 번째 줄을 old.txt다음으로 바꿀 내용 append.txt:

$ sed -e '1{ r append.txt' -e 'd;}' old.txt
---
123
<321>
foo
bar

-i-e내부 편집을 위해 첫 번째 항목 앞에 추가합니다 old.txt.

sed그러면 주어진 파일에서 다음과 같은 짧은 스크립트가 실행됩니다.

1{                 # we're on the first line
    r append.txt   # read in the whole of the append.txt file
    d;             # delete the current line
}
                   # (implicit print)

-e명령줄에서는 명령과 함께 사용되는 파일 이름이 r줄 바꿈(또는 현재 표현식 문자열의 끝)으로 끝나야 하기 때문에 두 개의 개별 표현식 문자열로 분할됩니다 .

관련 정보