给定一个字符串文件路径,例如/foo/fizzbuzz。酒吧,我如何使用bash提取只是fizzbuzz部分说的字符串?


当前回答

看看basename命令:

NAME="$(basename /foo/fizzbuzz.bar .bar)"

指示它删除后缀.bar,结果是NAME=fizzbuzz

其他回答

看看basename命令:

NAME="$(basename /foo/fizzbuzz.bar .bar)"

指示它删除后缀.bar,结果是NAME=fizzbuzz

perl -pe 's/\..*$//;s{^.*/}{}'

basename会移除路径。它还将删除给定的后缀,如果它与文件的后缀匹配,但您需要知道为命令提供的后缀。否则,你可以用mv,用其他方法找出新名称。

如果您想只保留带扩展名的文件名并删除文件路径

$ x="myfile/hello/foo/fizzbuzz.bar"
$ echo ${x##*/}
$ fizzbuzz.bar

Bash手册中的解释,请参见${parameter##word}

使用basename我使用以下方法来实现这一点:

for file in *; do
    ext=${file##*.}
    fname=`basename $file $ext`

    # Do things with $fname
done;

这不需要对文件扩展名的先验知识,即使你的文件名中有点(在它的扩展名前面)也可以工作;虽然它确实需要程序基名,但这是GNU coreutils的一部分,所以它应该随任何发行版一起发布。