bash ;删除一组后缀中的任何一个

标签 bash pattern-matching

OSX Snow Leopard 上的 Bash 脚本,我想删除一组文件后缀中的任何一个,但我的 googlefu 失败了。

给定

file="filename_1"
file1=${file%_1}
echo $file1
filename

但是,将模式列表引入剥离的任何变化都让我失败,例如:

shopt -s extglob
file1=${file/@(%_1|%_end)/}
echo $file1
filename_1

我尝试将模式列表放入变量中,使用括号或不使用,使用引号或不使用。 我得出的结论是,尾随字符串的替换和修剪不采用模式列表 - 或者我遗漏了一些相当明显的东西。感谢您对优雅的解决方案或我可能缺少的模式列表的建议。

最佳答案

您只是语法有点错误:${file%@(_1|_end)}

$ printf "%s\n" filename_1 filename_2 filename_end | 
  while read file; do echo ${file%@(_1|_end)}; done
filename
filename_2
filename

http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion

关于 bash ;删除一组后缀中的任何一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9888133/

相关文章:

regex - Perl - 正则表达式 - 第一个不匹配字符的位置

rust - 我如何告诉编译器我的函数像 process::exit() 一样终止了程序?

bash - 将 4 个文件合并为 1 个具有不同列的文件

bash - 为什么管道 $RANDOM 的输出会影响值?

bash - unix map 功能

java - 在模式中使用变量

scala - 理解与子类的模式匹配

regex - grep regex - 如何匹配相同的字符对?

linux - 在/etc/group文件中修改正确的组名和ID

validation - 通过 for-comprehension 线程 `Try` s