如何使用正则表达式切割基本路径

时间:2012-11-14 20:38:14

标签: regex linux bash

以下是示例

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/

有人知道我应该使用什么正则表达式吗?

4 个答案:

答案 0 :(得分:6)

您不需要正则表达式:

#!/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

答案 1 :(得分:4)

正则表达式不用于提取子字符串。为什么不使用dirname命令?

$ dirname /home/foo/whatever.txt
/home/foo
$

如果您需要变量:

DIRECTORY=`basename "SF_Library/example/Platform/DS-PLATFORM.car"`

答案 2 :(得分:2)

您可以使用 dirname 命令:

dirname SF_Library/example/Platform/DS-PLATFORM.car

它会给你:SF_Library/example/Platform

答案 3 :(得分:1)

好吧,我会放纵你。

^(.*/).*$

解剖:

^     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

这是有效的,因为*是贪婪的:它匹配尽可能多的字符(因此它将包括直到最后一个的所有斜杠)。

但正如其他答案所指出的那样,正则表达式可能不是最好的方法。