我正在编写一个 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