Bash SED Unterminated`s'命令

时间:2018-12-03 13:35:01

标签: bash sed

我是Bash脚本的新手,遇到了问题。我已经搜索过,看来问题可能出在我的变量$ MODIFIED中。

想知道是否有人可以帮助我找到解决方法?

我试图从目录中获取最后5个修改后的文件,然后通过替换第二个脚本中的第一行将它们导入到第二个脚本中。

到目前为止,我的代码:

#Pipe last 5 modified files within Students and output to script2
#Checks if script2 exists to avoid overwriting.
cd ~/Students/Stu5
MODIFIED=$(ls -1t | head -5)


if [ -f ~/Documents/OSShellScripts/OSScript2.sh ]; then
        cd ~/Documents/OSShellScripts
        echo "OSScript2 already exists."
        sed -i "1s/.*/$MODIFIED/" ~/Documents/OSShellScripts/OSScript2.sh
fi

这将返回错误:sed:-e表达式#1,字符17:未终止的s命令

如果我将MODIFIED变量更改为“ hello”,则效果很好。

任何帮助我指出我要去哪里的地方都会很棒,谢谢。

1 个答案:

答案 0 :(得分:1)

在传递给sed时,首先正确引用bash变量。

第二次记住,您正在将数组传递给sed。

如果这是故意的,则需要执行以下操作:

=IF($A2=MAX($A:$A),$F$1-SUM($B$1:$B1),RANDBETWEEN(0,($F$1-SUM($B$1:$B1))*($A2/MAX($A:$A))))

我还将更改sed的替代命令sed -i '1s/.*/'"$(echo ${MODIFIED})"'/' ~/Documents/OSShellScripts/OSScript2.sh 更改行命令s,因为您的变量可能包含斜杠:

c