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



这是一个例子

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

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

但正如其他答案所指出的那样,正则表达式可能不是执行此操作的最佳方法。

相关内容

  • 没有找到相关文章

最新更新