sedを使用してファイルの上部に行を挿入するには?

sedを使用してファイルの上部に行を挿入するには?

Amazon Linuxでbashシェルを使用しています。ファイルの上部に行を挿入しようとしているので

header_line="first_line_of_file"
...
    sed -i "1 i\$header_line" /tmp/$file_title

しかし、実際に私のファイルの上部に表示されるものは次のとおりです。

$header_line

sedに私の変数を文字通り解釈するのではなく、代わりに変数の値を使用してファイルの先頭に挿入するように指示するにはどうすればよいですか?

ベストアンサー1

GNUまたはを使用している場合は、次のことができるはずですbusyboxsed

sed -i "1i $header_line" "/tmp/$file_title"

あなたが経験している問題は、$シェルから逃げて変数として認識されないことです$header_line

NetBSDまたはOpenBSDの使用sed(FreeBSDとmacOSでも動作しますが-i、間にスペースが必要です''):

sed -i'' "1i\\
$header_line
" "/tmp/$file_title"

BSDは、sed従来のsed実装と同様に、POSIXに従ってコマンド\の後に1つのリテラル改行を必要とし、i二重引用符を使用するため、\シェルからエスケープする必要があります。

別のオプションは、次のものを使用することですcat

printf '%s\n' "$header_line" | cat - "/tmp/$file_title" >new_file && mv new_file "/tmp/$file_title"

$header_lineこれはまた、以下の説明でStéphane Chazelasが言及した値のバックスラッシュ問題を回避します。

おすすめ記事