这是一个例子
SF_Library/example/Platform/Analyses-PLATFORM.part0.xml
SF_Library/example/Platform/Models-PLATFORM.part0.xml
SF_Library/example/Platform/Models-PLATFORM.car
SF_Library/example/Platform/DS-PLATFORM.car
我想抓住下面的基本路径。
SF_Library/example/Platform/
有人知道我应该使用什么正则表达式吗?
你不需要正则表达式:
#!/bin/bash
fullpath="SF_Library/example/Platform/Analyses-PLATFORM.part0.xml"
# or if you read them then: while read fullpath; do
basename=${fullpath%/*}
# or if you read them then: done < input_file.txt
正
则表达式不是用来提取子字符串的。为什么不使用 dirname
命令?
$ dirname /home/foo/whatever.txt
/home/foo
$
如果你在变量中需要它:
DIRECTORY=`basename "SF_Library/example/Platform/DS-PLATFORM.car"`
您可以使用 dirname 命令:
dirname SF_Library/example/Platform/DS-PLATFORM.car
它会给你:SF_Library/example/Platform
好吧,我会放纵你。
^(.*/).*$
解剖:
^ beginning of string
( start of capture group
.* series of any number of any character
/ a slash
) end of capture group
.* series of any number of characters that are not slashes
$ end of string
这是有效的,因为*
贪婪:它匹配尽可能多的字符(因此它将包括所有斜杠直到最后一个斜杠)。
但正如其他答案所指出的那样,正则表达式可能不是执行此操作的最佳方法。