2015-11-10 182 views
0

情景:我有一个脚本,但不知道在哪里,我在目录树中,我需要解决回到最近的已知位置UPROC [某件事]字符串操作

我到目前为止有: 我有一个脚本在一个目录下运行,例如:

/home/jim/query/UPROCL/test/bob/dircut.sh 

现在在这个唯一不变的是,我想要的目录将UPROC开始......也许不是UPROCL但绝对UPROC

所以我写了下面的:

#!/bin/bash 

#Absolute path for this script 
SCRIPT=$(readlink -f "$0") 
echo $SCRIPT 

#Gets Path of script without script name 
SCRIPTPATH=$(dirname "$SCRIPT") 
echo $SCRIPTPATH 

#Cuts everything after UPROC(.* is wildcard)/ 
CUTDOWN=$(sed 's/\(UPROC.*\/\).*/\1/' <<< $SCRIPTPATH) 
echo $CUTDOWN 

唯一的问题是,它的输出是:

/home/jim/query/UPROCL/test/bob/dircut.sh 
/home/jim/query/UPROCL/test/bob 
/home/jim/query/UPROCL/test/ 

一些能告诉我什么是错我的sed命令,因为它不削减至

/home/jim/query/UPROCL/ 

回答

1

因为*是贪婪。你想成为更好地选择允许下面的“UPROC”什么字 - 任何非斜线

sed 's/\(UPROC.*\/\).*/\1/' 

sed -r 's,(UPROC[^/]*/).*,\1,' 

使用不同的分隔符为s///命令降低“倾斜牙签”问题。

1

因为在().*是在test/末端匹配到/

你需要[^/]*而不是.不匹配任何斜杠。

1

当你想知道在哪个目录你,为什么不使用pwd

可能有用的一件事:命令pwd显示环境变量PWD(大写)的值。如果您想使用当前目录作为一个值,你可以用这个。