ファイルの最初の行を別のファイルの内容全体に置き換える必要があります。私が何を見逃しているのか知っていますか?
$ 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
改行(または現在の式文字列の終わり)で終わる必要があるため、2つの別々の式文字列に分割されます。