繁体   English   中英

正则表达式,用于从Linux中的字符串获取路径和文件名

[英]regex for getting path and filename from string in linux

在bash中,我想从命令行字符串获取文件名。 但不是当前($ 0)脚本!

我有一个充满参数的脚本文件。 我只需要其中的脚本!

例如,我有一个字符串,如:/ path / to / file parameter1 -p2

我想得到:/ path / to / file(不带参数),即使在以下情况下:

/an\ example/with.dot.in_it/.hidden_file.sh par\ ameter1 p.dot.2
./script.sh p1 p2
../script.sh p1 p2
/any////relative/../path/./to/script.sh p1 p2

因此,在任何有效的linux路径和文件名情况下!

是否有用于此目的的正则表达式,或者还有其他方法可以做到这一点吗?

提前致谢!

您可以结合使用perl的命令行正则表达式功能和readlink命令来始终获取脚本的完整路径。 数据是带有所有命令及其参数的文件名。 您可以使用如下脚本来获取脚本的完整路径:

while read -r F
do
    SCRIPT=$(perl -pe 's/^(.*?)(?<!\\) .*$/\1/;s/\\//g' <<< $F)
    readlink -f "$SCRIPT"
done < data

要从.hidden_file.sh内部.hidden_file.sh shell或shell脚本的名称,可以使用$0

echo "$0"

您可以使用dirname命令。

如果您真的想使用正则表达式(上面介绍了许多更好的解决方案),那么这可能会帮助您:

/^(.+[^\\]) /

这会将所有字符都匹配到第一个空格,该空格不跟\\

您可以从捕获的组中获取路径

basename "$string"

要么

${string##*/}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM