使用sed变量

时间:2013-08-07 16:33:30

标签: bash sed

首先,我道歉,如果之前已经回答,但我无法解决我的问题。

我需要搜索一个模式然后用一行包含文本和变量的文本替换它。我正在使用bash ..

$var = "stacko.ver/rulz=" **Note: $var contain double quotes & = & a dot and /**

我想跟随 1.搜索;te.xt = 注意:要搜索的值包含; &安培; =和一个点

2.用

替换它
textnum=$var

当然$ var应该用其实际值替换

我的尝试

sed -i "s/;te.xt =/textnum=$var/" file
sed -i "s/;te.xt =/textnum="$var"/" file
sed -i "s/";te.xt ="/"textnum=$var"/" file

这些都没有实际工作,要么是给了我一个错误,要么$ var的值没有在文件中显示

感谢您的帮助

此致

2 个答案:

答案 0 :(得分:5)

引用没有帮助,因为这是一个sed问题,而不是bash问题。只需选择一个未出现在文本中的sed s表达式分隔符:

sed -i "s|;te.xt =|textnum=$var|" file

您可以选择s中未出现在输入中的任何分隔符。 sed -e 'streetlight'是一个非常有效的sed命令。

答案 1 :(得分:2)

我可以看到错误:

$ var="stacko.ver/rulz="
$ data="foo ;te.xt = bar"
$ sed "s/;te.xt =/textnum=$var/" <<< "$data"
sed: -e expression #1, char 31: unknown option to `s'

问题是$var包含斜杠,因此sed的s///命令正在破坏。您需要选择一个未出现在$ var

中的字符
$ sed "s#;te.xt =#textnum=$var#" <<< "$data"
foo textnum=stacko.ver/rulz= bar

这可能很难 - 如果斜线和散列在$ var中会怎么样?使用bash,您可以使用ANSI-C quoting来使用不太可能出现在数据中的控制字符,例如

$ sed $'s\037;te.xt =\037textnum=$var\037' <<< "$data"
foo textnum=stacko.ver/rulz= bar