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
一重引用符内に変数を含めることはできません。あなたはできます:
sedスクリプト全体の周りに二重引用符を使用し、その中の二重引用符をバックスラッシュでエスケープします。
一重引用符で囲まれた文字列を二重引用符で囲まれた変数で終わり、一重引用符で囲まれた
'
文字列を再起動します。
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
エスケープは必要ありません。