sedコマンドはいくつかの行を追加します

sedコマンドはいくつかの行を追加します

sedを使用してbashスクリプトを介していくつかの行を追加したいと思います。スクリプトは機能しますが、出力が正しくありません。

LINEB="word"
sed '/g id=\"..\"/a style=\"fill:$LINEB;\"' file.txt > foo.txt

私は<g id="ai" style="fill:$LINEB;">代わりに受け取った<g id="ai" style="fill:word;">

いろいろな括弧を使っても。

答え1

一重引用符内に変数を含めることはできません。あなたはできます:

  1. sedスクリプト全体の周りに二重引用符を使用し、その中の二重引用符をバックスラッシュでエスケープします。

  2. 一重引用符で囲まれた文字列を二重引用符で囲まれた変数で終わり、一重引用符で囲まれた'文字列を再起動します。

LINEB="word"
sed '/g id=\"..\"/a style=\"fill:'"$LINEB"';\"' file.txt > foo.txt

答え2

$LINEBまず、pendコマンドを正しく準備するように注意する必要がありますsed a

sed '/<\([^"<>]*\("[^"]*"\)* \)*g id="[^"][^"]"/a\'"$(echo;#"'
     printf 'style="fill:"%s"\n' "$LINEB" |
     sed 'H;1h;$!d;s/\\/&&/g;s/\n/\\&/g')
"    <infile >outfile

また、他のファイルで追加のテキストを見つける方がa簡単かもしれません。その後、r適切であれば読むことができます。

printf 'style="fill:%s"\n' "$LINEB" >/tmp/LINEB
sed '/<\([^"<>]*\("[^"]*"\)* \)*g id="[^"][^"]"/r /tmp/LINEB' <infile >outfile
rm /tmp/LINEB

エスケープは必要ありません。

関連情報