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

时间:2012-01-30 15:29:13

标签: regex linux path filenames

在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路径和文件名的情况下!

为此目的是否有正则表达式,或者还有其他方法可以解决这个问题吗?

提前致谢!

5 个答案:

答案 0 :(得分:1)

您可以使用perl的命令行正则表达式功能与readlink命令结合使用始终获取脚本的完整路径。让我们的数据是您的文件名,包含所有命令及其参数。您可以使用这样的脚本来获取脚本的完整路径:

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

答案 1 :(得分:0)

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

echo "$0"

答案 2 :(得分:0)

您可以使用dirname命令。

答案 3 :(得分:0)

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

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

这匹配到第一个空格的所有字符,它不跟在\

之后

您从捕获的组中获取路径

答案 4 :(得分:0)

basename "$string"

或者

${string##*/}