Amazon Linuxでbashシェルを使用しています。ファイルの上部に行を挿入しようとしているので
header_line="first_line_of_file"
...
sed -i "1 i\$header_line" /tmp/$file_title
しかし、実際に私のファイルの上部に表示されるものは次のとおりです。
$header_line
sedに私の変数を文字通り解釈するのではなく、代わりに変数の値を使用してファイルの先頭に挿入するように指示するにはどうすればよいですか?
答え1
GNUまたはを使用している場合は、次のことができるはずですbusybox
。sed
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が言及した値のバックスラッシュ問題を回避します。