如何使用 bash 命令从字符串中提取子字符串

How extract a substring from string using bash commands

我想提取子字符串:

"1.0.119"

发件人:

"/abc/efg/v/y-1.0.119.u"

如何实现?

(我从管道中获取了整个字符串)

谢谢

> echo "/abc/efg/v/y-1.0.119.u" | cut -d'-' -f2 | cut -d'.' -f1-3
1.0.119
  • cut -d'-' -f2 returns第一个-之后是什么。
  • cut -d'.' -f1-3 returns第三个之前是什么..
echo "/abc/efg/v/y-1.0.119.u" | sed 's/\(^.*-\)\(.*\)\(\..*$\)//'

使用 sed 将文本分成三部分,用括号分隔并只打印第二部分。

您可以使用 Bash 正则表达式匹配最后一个 - 和最后一个 . 之间的字符:

$ [[ "/abc/efg/v/y-1.0.119.u" =~ [^-]+-(.*)\. ]] && echo "${BASH_REMATCH[1]}" 
1.0.119

sed相同的模式:

$ echo "/abc/efg/v/y-1.0.119.u" | sed 's/^\([^-]*-\)\(.*\)\(\..*$\)//'
1.0.119