如何从字符串中提取以单词开头的子字符串

如何从字符串中提取以单词开头的子字符串

我正在编写一个 bash 脚本,有时我有 $path="things useless things... path/another/files1/useful/path/here"

所以我试图删除“files1”之前的所有单词和文本并获取files1之后的部分(包含)

在这个例子中:files1/useful/path/here

我能够获得其后的部分,但不包括文件1

我该如何实现这一目标?

答案1

怎么样(对于文件脚本):

sed -n 's#\(path="\).*/\(files1/[^"]*"\)#\1\2#p' script

或者,如果该值位于变量内部:


$ path="things useless things... path/another/files1/useful/path/here"

$ echo "/files1/${path##*/files1/}"

/files1/useful/path/here

答案2

您可以使用从变量前面${var#pattern}删除最短匹配的语法:pattern

$ path="things useless things... path/another/files1/useful/path/here"
$ echo "${path#*another/}" 
files1/useful/path/here

或者,您可以使用任何标准文本解析工具。例如:

$ newPath=$(sed -E 's|.*(files1/)|\1|'<<<"$path")
$ echo $newPath 
files1/useful/path/here

答案3

既然您正在使用,bash您也可以使用其内置的正则表达式引擎:

$ path="things useless things... path/another/files1/useful/path/here"
$ [[ "$path" =~ /files1/.*$ ]] && echo "$BASH_REMATCH"
/files1/useful/path/here

相关内容