Sed附加到行末目录

时间:2014-12-20 22:05:21

标签: bash variables unix sed directory

我对SED很新,我很难尝试追加到目录的末尾。我正在做的事涉及sed的两个基本内容,但由于某种原因,脚本运行后没有进行任何更改。我将展示我的剧本片段

我有一个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变量中取消了$,该变量没有做任何事情。我知道我错过了一些小事,但我无法弄明白。我非常感谢您抽出时间回答我的问题。

2 个答案:

答案 0 :(得分:0)

我认为您的命令行可以修改,然后将输出重定向到olddir,如下所示:

echo $dir | sed 's#\(/export/home\).*#\1#' > olddir    

添加USERNAME VARIABLE

sed -i "s#/export/home#&/$USERNAME#" olddir 

答案 1 :(得分:0)

在使用提供的信息并使用代码后,我找到了一个适用于/ export / home / ID和/ home / ID情况的解决方案。

我同时使用了Xorg和gniourf_gniourf的建议,下面是我的结果。

echo $dir | sed 's_\([/export/home\]*\).*_\1_' > olddir

以上代码是我解决方案的第一部分。 我使用了Xorg为上面的代码提供的内容,但看起来我需要那些[]所以我可以使用*\如果我将其作为echo $dir | sed 's_\(/export/home\).*_\1_' > olddir,那么olddir文件将在使用以下sed命令后包含/export/home/ID/test

以下是我使用的以下sed命令:

sed -i 's_/home_&/'"$USERNAME"'_' olddir

上面的代码是我的解决方案的第二部分。我认为我真的只需要把重点放在/ home /因为我追加它。我查看了gniourf_gniourf的评论并使用了引号将$USERNAME""隔离开来的示例,这似乎是您可以告诉脚本使用$ USERNAME作为变量而不仅仅是放入字符的方式$USERNAME

所以在脚本运行之后,根据主机,我要么export/home/test//home/test/我现在可以将其中任何一个放入脚本中的新变量来用来指定主目录在远程主机上创建ID时!

newdir="$(cat olddir)"

非常感谢你的帮助。在你的帮助下,我无法弄清楚这一点。

更新:事实证明目录中的traling /有问题所以我找到了一种更容易的方法来替换主目录中的ID

newdir="${dir/ID/${USERNAME}}"

我使用这些if主目录情况的语句

`if [[$ dir ==“/ home / dhabinsk”]];然后         NEWDIR = “$ {DIR / dhabinsk / $ {USERNAME}}”     网络

if [[ $dir == "/export/home/dhabinsk" ]]; then
    newdir="${dir/dhabinsk/${USERNAME}}"
fi`

欢呼声