嵌套的美元符号在引号内

时间:2016-07-24 13:00:37

标签: bash sed

尝试编写包含嵌套美元变量的bash脚本,但我无法使其工作:

#!/bin/bash
sed '4s/.*/$(grep "remote.*$1" /home/txtfile)/' /home/target

错误说:

  

sed / -e表达式#1,字符30:未知选项'

问题似乎来自$ 1,需要用从bash调用传递的参数替换,然后整个$(...)需要被命令调用替换,所以我们用字符串替换目标行4输出

2 个答案:

答案 0 :(得分:0)

当放入单引号内时,不会进行变量扩展和命令替换,而是使用双引号:

sed "4s/.*/$(grep "remote.*$1" /home/txtfile)/" /home/target

答案 1 :(得分:0)

你的方法是错误的,做你想做的正确的方法只是一个命令,就像这样(取决于你可能的$1值和输入文件内容,你没有向我们展示):

awk -v tgt='remote.*$1' '
NR==FNR { if ($0 ~ tgt) str = str $0 ORS; next }
FNR==4  { printf "%s", str; next }
{ print }
' /home/txtfile /home/target