【发布时间】:2014-12-20 22:05:21
【问题描述】:
我对 SED 非常陌生,我很难尝试追加到目录的末尾。我正在做的事情涉及 sed 的 2 项基本操作,但由于某种原因,脚本运行后没有进行任何更改。我将展示我的脚本片段
我有一个 bash 脚本,它从主机中提取我的主目录并定义了 ID 变量。
USERNAME="test"
#pull the home directory
dir=$(ssh -n -t $SERVERNAME "echo \$HOME";)
上面的例子将 /export/home/ID 存储在 dir 变量中
echo $dir | sed 's/\([/export/home]*\).*/\1/' > olddir
上面的 sed 命令将 /export/home/ 存储在文件 olddir 中(去掉结尾)
sed -i 's_/home/$ _\$USERNAME_' olddir
我现在尝试使用带有转义的$ 的已定义变量将/export/home/ 更改为/export/home/test。
脚本运行后,/export/home/ 仍然作为 olddir 文件中的条目。
我正在使用-i 修改文件,我认为我正确使用了分隔符?我做错了什么?我什至从 USERNAME 变量中删除了$,它没有做任何事情。我知道我错过了一些小东西,但我就是想不通。非常感谢您抽出时间回答我的问题。
【问题讨论】:
-
为什么需要辅助文件?从您的
dir变量中,您可以在变量newdir中获得您想要的内容,如下所示:newdir=${dir%/*}/$USERNAME。现在它失败的原因是因为您使用的是单引号:bash 禁止在单引号内扩展变量。相反:sed -i 's_/home/$_'"$USERNAME"'_' olddir应该可以工作。
标签: bash variables unix sed directory