首页 > 解决方案 > Bash SED 未终止的“s”命令

问题描述

我是 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 expression #1, char 17: unterminated `s' command

如果我将 MODIFIED 变量更改为“你好”,它会完美运行。

任何能指出我哪里出错的帮助都会很棒,谢谢。

标签: bashsed

解决方案


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

其次请记住,您正在将数组传递给 sed。

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

sed -i '1s/.*/'"$(echo ${MODIFIED})"'/' ~/Documents/OSShellScripts/OSScript2.sh

我还将更改 sed 的替代命令s以更改行命令c,因为您的变量可能包含斜杠:

sed -i '1c\'"$(echo ${MODIFIED[@]})"

推荐阅读