String 如何使用bash脚本中的变量更改sed行

String 如何使用bash脚本中的变量更改sed行,string,bash,variables,replace,sed,String,Bash,Variables,Replace,Sed,我有一个脚本文件,我正试图使它修改命令行参数与几个启动脚本。这个bash脚本将寻找一条路径,并用一条新路径替换整个行。任何帮助都将不胜感激,下面您将找到我的代码示例 Path=/usr/bin/MyApplication NewArguments= -a1 -b2 -c3 NewCommand="$Path $NewArguments" sed -i 's,^'"$Path"'*,\'"$NewCommand"',' /root/etc/rc.d/99_start_app.sh 我要找的是转

我有一个脚本文件,我正试图使它修改命令行参数与几个启动脚本。这个bash脚本将寻找一条路径,并用一条新路径替换整个行。任何帮助都将不胜感激,下面您将找到我的代码示例

Path=/usr/bin/MyApplication
NewArguments= -a1 -b2 -c3
NewCommand="$Path $NewArguments"

sed -i 's,^'"$Path"'*,\'"$NewCommand"',' /root/etc/rc.d/99_start_app.sh
我要找的是转换一行,如下所示:

/usr/bin/MyApplication -x1 -y2 -z3 
Path=/usr/bin/MyApplication
NewArguments='-a1 -b2 -c3'    
sed -i "s,^$Path.*,$Path $NewArguments \&," /root/etc/rc.d/99_start_app.sh
为此:

/usr/bin/MyApplication -a1 -b2 -c3 &
如果您对此有任何帮助,我们将不胜感激。

请使用双引号展开shell变量
我想你的意思是:

sed -i 's,^'"$Path"','"$NewCommand"',' /root/etc/rc.d/99_start_app.sh
…可简化为:

sed -i s,^"$Path","$NewCommand", /root/etc/rc.d/99_start_app.sh
…而且可能更容易理解为:

sed -i "s,^$Path,$NewCommand," /root/etc/rc.d/99_start_app.sh
实际上,您分配
NewArguments
的方式也是不正确的,我还将改进
sed
,因此最终您的脚本可以这样编写:

/usr/bin/MyApplication -x1 -y2 -z3 
Path=/usr/bin/MyApplication
NewArguments='-a1 -b2 -c3'    
sed -i "s,^$Path.*,$Path $NewArguments \&," /root/etc/rc.d/99_start_app.sh

您的上一个建议在很大程度上是有效的,但是它不会删除旧的命令行参数。为了让它正常工作,我需要找到匹配的命令,删除旧的行并替换为新的行。更新似乎不起作用。在下面,您将看到我通过您上次更新的选项得到的信息以及预期的信息。前一行:/usr/bin/MyApplication-x1-y2-z3结果行(使用更新方法):/usr/bin/MyApplication-a1-b2-c3/usr/bin/MyApplication-x1-y2-z3预期行:/usr/bin/MyApplication-a1-b2-c3@rutri这里不太可读。请将其编辑到您的问题中。结果已按要求编辑到问题中。@rutri我整理了一下我的答案,但代码与前面的相同。如果你复制粘贴正确,它应该会工作,如果它仍然没有,我无法想象为什么。