bash – 是否可以在一个操作中应用两个匹配的模式转换?
发布时间:2020-12-16 01:18:42 所属栏目:安全 来源:网络整理
导读:我有一个填充了文件名和路径的bash变量: SONG="~/Music/Mine/Cool Title Bro.flac" 在我尝试使标记变得更加容易的过程中,我对变量应用了一些转换以隔离标题: echo "${SONG#~/Music/Mine/}" # which prints: Cool Title Bro.flac 我知道也可以用${SONG %%.
我有一个填充了文件名和路径的bash变量:
SONG="~/Music/Mine/Cool Title Bro.flac" 在我尝试使标记变得更加容易的过程中,我对变量应用了一些转换以隔离标题: echo "${SONG#~/Music/Mine/}" # which prints: Cool Title Bro.flac 我知道也可以用${SONG %%.flac}删除后缀. 但是,是否可以在单个操作中删除前缀和后缀? 这个: ${SONG#~/Music/Mine/%%.flac} 大概是因为它试图匹配文字%%.flac作为前缀的一部分.反过来不起作用(%%.flac#?/ […]),我甚至疯了似试 ${${SONG#~/Music/Mine/}%%.flac} 这也行不通. 这可能是我工程过度工程的一个主要例子,但是如果有办法做到这一点并且我还没有弄清楚它会很好. echo "1:" if [[ "$SONG" =~ ~/Music/Mine/(.*).flac ]] ; then SONG=${BASH_REMATCH[1]} ; fi echo $SONG echo "2:" [[ "$SONG" =~ ~/Music/Mine/(.*).flac ]] && SONG=${BASH_REMATCH[1]} echo $SONG 1和2使用bash正则表达式.如果您的字符串与预期的格式不匹配,第一个示例还具有能够进入else分支的附加优势.*第二个示例有点清晰.在这两种情况下,如果${SONG}与模式不匹配,则保持不变. 但是使用awk或sed可能更容易理解.例如: echo "3:" SONG=$(echo "$SONG" | sed -r 's:~/Music/Mine/(.*).flac:1:') echo $SONG [*]参见DennisWilliamson关于使用||的注释得到一个其他分支. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- scala – 使用spark-csv重载方法错误
- 【玩转 Angular】1. Angular-CLI 安装与使用
- Gvim:Ubuntu字母间距(Consolas字体)
- emit,EventEmitter,subscribe,next,subject 使用
- vim – 使Synthetic关闭错误窗口
- bash – 如何通过Cygwin在Windows 7上运行.sh文件?
- SQL优化三板斧:精简之道、驱动为王、集合为本
- Angular 4.x Router Link Directives
- AT91SAM9260EK的BootStrap移植
- [Angularjs]ng-repeat中使用ng-model遇到的问题