我想从bash脚本发出这个命令
sed -e $beginning,$s/pattern/$variable/ file
但任何可能的引号组合都会给我一个错误,只有一个错误:
sed -e "$beginning,$"'s/pattern/$variable/' file
也不好,因为它不会取消引用变量。
我的方法是否可以用sed实现?
答案 0 :(得分:1)
随意切换报价。外壳可以保持平直。
sed -e "$beginning"',$s/pattern/'"$variable"'/' file
答案 1 :(得分:0)
你可以试试这个:
$ sed -e "$beginning,$ s/pattern/$variable/" file
<强> file.txt的:强>
one
two
three
尝试:
$ beginning=1
$ variable=ONE
$ sed -e "$beginning,$ s/one/$variable/" file.txt
<强>输出:强>
ONE
two
three
答案 2 :(得分:0)
有两种类型的报价:
单引号保留其内容(>
是提示符):
> var=blah
> echo '$var'
$var
双引号允许参数扩展:
> var=blah
> echo "$var"
blah
两种$
符号:
你必须将这些结合起来
$
与参数一种可能性是
sed "$beginning,\$s/pattern/$variable/" file
整个命令是双引号,即参数得到扩展($beginning
和$variable
)。为了确保shell不会尝试展开不存在的$s
,“行尾”$
将被转义,因此shell不会尝试任何有趣的事情。
其他选项
$
和s
之间添加空格(请参阅Ren's answer)sed '$beginning,$s/pattern/$variable/' file
单引号中的所有内容:shell参数未展开(不遵循上面的规则2)。 $beginning
不是有效地址,pattern
将被$variable
字面替换。
sed "$beginning,$s/pattern/$variable/" file
所有内容都是双qoutes:参数被扩展,包括$s
,这是不应该的(不遵循上面的规则1)。
答案 3 :(得分:-1)
以下表单在脚本
中为我工作sed $beg,$ -e s/pattern/$variable/ file
如果从shell
执行,同样的表单也会起作用