给定一个字符串文件路径,例如/foo/fizzbuzz。酒吧,我如何使用bash提取只是fizzbuzz部分说的字符串?
当前回答
你可以使用
mv *<PATTERN>.jar "$(basename *<PATTERN>.jar <PATTERN>.jar).jar"
例如:-我想从我的文件名中删除- snapshot。用于下面的命令
mv *-SNAPSHOT.jar "$(basename *-SNAPSHOT.jar -SNAPSHOT.jar).jar"
其他回答
下面是如何在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}后面部分匹配的section。
你可以使用
mv *<PATTERN>.jar "$(basename *<PATTERN>.jar <PATTERN>.jar).jar"
例如:-我想从我的文件名中删除- snapshot。用于下面的命令
mv *-SNAPSHOT.jar "$(basename *-SNAPSHOT.jar -SNAPSHOT.jar).jar"
basename会移除路径。它还将删除给定的后缀,如果它与文件的后缀匹配,但您需要知道为命令提供的后缀。否则,你可以用mv,用其他方法找出新名称。
将排名第一的答案与排名第二的答案结合起来,得到没有完整路径的文件名:
$ x="/foo/fizzbuzz.bar.quux"
$ y=(`basename ${x%%.*}`)
$ echo $y
fizzbuzz
纯bash,在两个独立的操作中完成:
从路径字符串中移除路径: 路径= / foo / bar / bim /巴兹/ file.gif 路径文件= $ {# # * /} #$file现在是file.gif 从路径字符串中移除扩展名: 基础= ${文件%。*} #${base}现在是“文件”。
推荐文章
- 我如何检查如果一个变量是JavaScript字符串?
- 如何显示有两个小数点后的浮点数?
- 如何循环通过一个目录递归删除具有某些扩展名的文件
- 在Bash中获取日期(比当前时间早一天)
- Linux: kill后台任务
- 在Lua中拆分字符串?
- 在OSX中永久设置PATH环境变量
- 如何在Python中按字母顺序排序字符串中的字母
- 删除Bash脚本中的重复条目
- python: SyntaxError: EOL扫描字符串文字
- 如何将Bash命令的输出分配给变量?
- PHP子字符串提取。获取第一个'/'之前的字符串或整个字符串
- 在bash中传递数组作为参数
- 如何在shell中为for循环添加前导零?
- Bash中单方括号和双方括号的区别