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

这不需要逃避。

相关内容