2015-11-10 2 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 (в верхнем регистре). Если вы хотите использовать текущий каталог в качестве значения, вы можете использовать его.

Смежные вопросы