给定一个字符串文件路径(例如/foo/fizzbuzz.bar
,我将如何使用bash提取字符串中的fizzbuzz
部分?
#1楼
看一下basename命令:
NAME=$(basename /foo/fizzbuzz.bar .bar)
#2楼
纯bash方式:
~$ x="/foo/bar/fizzbuzz.bar.quux.zoom";
~$ y=${x/\/*\//};
~$ echo ${y/.*/};
fizzbuzz
在man bash的“参数扩展”下解释了此功能。 非bash方式比比皆是:awk,perl,sed等。
编辑:使用文件后缀中的点,并且不需要知道后缀(扩展名),但不适用于名称本身中的点。
#3楼
perl -pe 's/\..*$//;s{^.*/}{}'
#4楼
basename和dirname函数是您所需要的:
mystring=/foo/fizzbuzz.bar
echo basename: $(basename "${mystring}")
echo basename + remove .bar: $(basename "${mystring}" .bar)
echo dirname: $(dirname "${mystring}")
输出:
basename: fizzbuzz.bar
basename + remove .bar: fizzbuzz
dirname: /foo
#5楼
这是使用Bash中的#和%运算符进行操作的方法。
$ x="/foo/fizzbuzz.bar"
$ y=${x%.bar}
$ echo ${y##*/}
fizzbuzz
${x%.bar}
也可以是${x%.*}
以删除点后的所有内容,或者${x%%.*}
以删除第一个点后的所有内容。
例:
$ x="/foo/fizzbuzz.bar.quux"
$ y=${x%.*}
$ echo $y
/foo/fizzbuzz.bar
$ y=${x%%.*}
$ echo $y
/foo/fizzbuzz
文档可以在Bash手册中找到。 查找${parameter%word}
和${parameter%%word}
尾部匹配部分。
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3168114