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改行(または現在の式文字列の終わり)で終わる必要があるため、2つの別々の式文字列に分割されます。

関連情報