如何使用 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
我想提取子字符串:
"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