Bash字符串操作,提取/删除部分

use*_*963 1 bash

我正在修改一个旧的bash文件,并且在操作字符串时遇到了一些麻烦.问题是字符串可以是左边的任意字符串_<date>.<num>.例如,从中ThisIsAString-Sub_tag_150827.1,我需要提取 _150827.1.在bash中,这似乎很难做到.在任何其他语言中,我会拆分_,然后抓住列表的最后一个元素.我怎么在bash中这样做?我尝试了几种不同的方式(包括使用awk),但似乎无法做到正确.

Cyr*_*rus 6

使用bash的参数扩展:

a="ThisIsAString-Sub_tag_150827.1"
echo "${a##*_}"
Run Code Online (Sandbox Code Playgroud)

输出:

150827.1

  • @ user797963用`##`代替```,Bash会删除最长的匹配字符串,而不是最短的字符串; 使用`#`会留下"tag_"前缀.请参见[此处的手册页](http://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html). (4认同)
  • `_`和`*`的顺序很重要. (3认同)