目录结构的字符串操作
string manipulation of Directory structure
场景:我有一个脚本但不知道我在目录树中的什么位置,我需要解析回最近的已知位置 UPROC[something]
到目前为止我有:
我在目录中有一个脚本 运行 例如:
/home/jim/query/UPROCL/test/bob/dircut.sh
现在唯一不变的是我想要的目录将以 UPROC
开头...也许不是 UPROCL
但肯定是 UPROC
所以我写了以下内容:
#!/bin/bash
#Absolute path for this script
SCRIPT=$(readlink -f "[=11=]")
echo $SCRIPT
#Gets Path of script without script name
SCRIPTPATH=$(dirname "$SCRIPT")
echo $SCRIPTPATH
#Cuts everything after UPROC(.* is wildcard)/
CUTDOWN=$(sed 's/\(UPROC.*\/\).*//' <<< $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/
因为()
中的.*
匹配到test/
末尾的/
。
您需要 [^/]*
而不是 .
才能不匹配任何斜杠。
因为*
是贪心的。您希望对 "UPROC" 之后允许的字符有更多的选择——任何非斜线
没有
sed 's/\(UPROC.*\/\).*//'
但是
sed -r 's,(UPROC[^/]*/).*,,'
对 s///
命令使用不同的分隔符可以减少 "leaning toothpick" 问题。
当你想知道自己在哪个目录时,为什么不用pwd
呢?
可能有用的一件事:命令 pwd
显示环境变量 PWD
的值(大写)。如果你想使用当前目录作为一个值,你可以使用这个。
场景:我有一个脚本但不知道我在目录树中的什么位置,我需要解析回最近的已知位置 UPROC[something]
到目前为止我有: 我在目录中有一个脚本 运行 例如:
/home/jim/query/UPROCL/test/bob/dircut.sh
现在唯一不变的是我想要的目录将以 UPROC
开头...也许不是 UPROCL
但肯定是 UPROC
所以我写了以下内容:
#!/bin/bash
#Absolute path for this script
SCRIPT=$(readlink -f "[=11=]")
echo $SCRIPT
#Gets Path of script without script name
SCRIPTPATH=$(dirname "$SCRIPT")
echo $SCRIPTPATH
#Cuts everything after UPROC(.* is wildcard)/
CUTDOWN=$(sed 's/\(UPROC.*\/\).*//' <<< $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/
因为()
中的.*
匹配到test/
末尾的/
。
您需要 [^/]*
而不是 .
才能不匹配任何斜杠。
因为*
是贪心的。您希望对 "UPROC" 之后允许的字符有更多的选择——任何非斜线
没有
sed 's/\(UPROC.*\/\).*//'
但是
sed -r 's,(UPROC[^/]*/).*,,'
对 s///
命令使用不同的分隔符可以减少 "leaning toothpick" 问题。
当你想知道自己在哪个目录时,为什么不用pwd
呢?
可能有用的一件事:命令 pwd
显示环境变量 PWD
的值(大写)。如果你想使用当前目录作为一个值,你可以使用这个。