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

Linux 如何使用bash命令从字符串中提取子字符串,linux,bash,cut,Linux,Bash,Cut,我想提取子字符串: "1.0.119" 发件人: "/abc/efg/v/y-1.0.119.u" 如何做到这一点 (我从管子里取出整根绳子) 谢谢 cut-d'-'-f2返回第一个-之后的内容 cut-d'.-f1-3返回第三个之前的内容 使用sed将文本分成三个部分,用括号隔开,只打印第二部分 您可以使用Bash正则表达式匹配最后一个-和最后一个之间的字符: $ [[ "/abc/efg/v/y-1.0.119.u" =~ [^-]+-(.*)\. ]] && ech

我想提取子字符串:

"1.0.119"
发件人:

"/abc/efg/v/y-1.0.119.u"
如何做到这一点

(我从管子里取出整根绳子)

谢谢

  • cut-d'-'-f2
    返回第一个
    -
    之后的内容
  • cut-d'.-f1-3
    返回第三个
    之前的内容

使用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/^\([^-]*-\)\(.*\)\(\..*$\)/\2/'
1.0.119

你不能进一步解释一下你想做什么吗?你自己尝试了什么?你是用引号得到的吗?如果这是一条路径,从
basename
开始<代码>基本名称“/abc/efg/v/y-1.0.119.u”
$ [[ "/abc/efg/v/y-1.0.119.u" =~ [^-]+-(.*)\. ]] && echo "${BASH_REMATCH[1]}" 
1.0.119
$ echo "/abc/efg/v/y-1.0.119.u" | sed 's/^\([^-]*-\)\(.*\)\(\..*$\)/\2/'
1.0.119