bash - 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 变量更改为“你好”,它会完美运行。
任何能指出我哪里出错的帮助都会很棒,谢谢。
解决方案
首先在传递给 sed 时正确引用 bash 变量。
其次请记住,您正在将数组传递给 sed。
如果这是故意的,您将需要执行以下操作:
sed -i '1s/.*/'"$(echo ${MODIFIED})"'/' ~/Documents/OSShellScripts/OSScript2.sh
我还将更改 sed 的替代命令s
以更改行命令c
,因为您的变量可能包含斜杠:
sed -i '1c\'"$(echo ${MODIFIED[@]})"
推荐阅读
- hibernate - @MapKeyJoinColumn 在映射表中显示为空
- amazon-redshift - 基于年份的查询的数据准备
- lc3 - 为什么这会给我一个非法操作数错误?
- swift - iOS14 HLS 音频流未在元数据(ID3 标签)中快速拉出用户定义的 URL 链接
- c - 为什么 kill 函数手册页显示两个标题 sys/types.h 和 signal.h
- android - 如何在 Kotlin android 活动类中跨函数使用绑定对象
- c++ - 向无序列表的每一项添加整数
- excel - 将文件列表从多个文件夹复制到一个目标文件夹
- django - 在 FormVIew 的 get_intial() 和 get_form_kwargs() 中使用来自 GET 请求的数据
- javascript - 如何将数据(歌曲的当前时间和持续时间)推送到 redux 状态?