首先,我道歉,如果之前已经回答,但我无法解决我的问题。
我需要搜索一个模式然后用一行包含文本和变量的文本替换它。我正在使用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的值没有在文件中显示
感谢您的帮助
此致
答案 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