如何在bash中的另一个命令中使用命令的结果?

时间:2015-02-19 15:30:02

标签: javascript linux bash shell unix

我试图在循环的每次迭代中用从finaltest.txt中提取的行替换我的Gruntfile.js的第10行。但是,在下面的代码之后发生的事情是在我的Gruntfile.js中,第10行被字符串$x取代而不是它包含的值。这是我的代码:

#!/bin/bash 

for i in {1..354}
do
    x=`sed -n '$ip' finaltest.txt`
    sed -i '10s/.*/$x/' Gruntfile.js
    grunt

done

此外,grunt命令用于运行Gruntfile.js。我在这里做错了什么?

编辑:$ x的问题已在下面给出的答案中解决,sed -i "10s~.*~$x~" Gruntfile.js

但是,剩下的唯一部分是,我想要使用finaltest.txt的1p,2p,3p,4p,etc等行1,2,3,4等来替换Gruntfile.js的第10行。但是

x=`sed -n '$ip' finaltest.txt

对于$ i无法正常工作,它会出错。我也试过"$(i)p"但仍然没有。我应该修改什么?

1 个答案:

答案 0 :(得分:1)

使用此sed命令:

sed -i "10s~.*~$x~" Gruntfile.js
  • 对shell使用双引号以允许展开$x
  • 使用备用正则表达式分隔符~,因为您的$x值中包含/

编辑:根据您编辑过的问题。你的第一部分也需要在这里加双引号:

x=$(sed "$iq;d" finaltest.txt)