파일의 첫 번째 줄을 다른 파일의 전체 내용으로 바꿔야 합니다. 내가 뭘 놓치고 있는지 알아?
$ 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
줄 바꿈(또는 현재 표현식 문자열의 끝)으로 끝나야 하기 때문에 두 개의 개별 표현식 문자열로 분할됩니다 .