Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在bash中提取字符串的一部分?_Bash_Shell_Sh - Fatal编程技术网

如何在bash中提取字符串的一部分?

如何在bash中提取字符串的一部分?,bash,shell,sh,Bash,Shell,Sh,如何在bash中提取字符串的一部分?假设我有一个字符串product\u name\u v1.2。此名称不是固定的,因为它可以更改。但是有一点是肯定的,字符串中会有一个版本号,格式类似于v. 我要做的是从字符串中提取v1.2和1.2。有什么建议吗?您可以使用几种标准工具,例如: expr product\u name\u v1.2:“产品名称”(.*)” expr product\u name\u v1.2:“.*(v.*)” echo product\u name\u v1.2 | sed-

如何在bash中提取字符串的一部分?假设我有一个字符串
product\u name\u v1.2
。此名称不是固定的,因为它可以更改。但是有一点是肯定的,字符串中会有一个版本号,格式类似于
v.


我要做的是从字符串中提取
v1.2
1.2
。有什么建议吗?

您可以使用几种标准工具,例如:

  • expr product\u name\u v1.2:“产品名称”(.*)”
  • expr product\u name\u v1.2:“.*(v.*)”
  • echo product\u name\u v1.2 | sed-ne的/^..*\(v[0-9.]\+\)$/\1/p'

选择主要取决于比赛的复杂程度
expr
仅支持有限的锚定正则表达式匹配,在上面的示例中就足够了。

您可以使用几种标准工具,例如:

var=product_name_v1.2
#from the beginning strip (#) longest (##) glob ending in v (*v)
echo "${var##*v}
  • expr product\u name\u v1.2:“产品名称”(.*)”
  • expr product\u name\u v1.2:“.*(v.*)”
  • echo product\u name\u v1.2 | sed-ne的/^..*\(v[0-9.]\+\)$/\1/p'
选择主要取决于比赛的复杂程度
expr
仅支持有限的锚定正则表达式匹配,在上面的示例中就足够了

var=product_name_v1.2
#from the beginning strip (#) longest (##) glob ending in v (*v)
echo "${var##*v}
Bash也有regexp匹配(与
[[
=~
匹配),但对于您的用例来说应该足够了

(您也可以查看以了解更多信息)

Bash也有regexp匹配(与
[[
=~
匹配),但对于您的用例来说应该足够了


(您还可以查看更多信息)。

在任何POSIX shell中,这都很简单:

str=product_name_v1.2
version=${str##*_v}
echo $version
#=> 1.2

结构
${
名称
##
模式
}
删除了与glob模式匹配的参数
$
名称内容的最长前缀,只留下后面的内容。

在任何POSIX shell中,这很简单:

str=product_name_v1.2
version=${str##*_v}
echo $version
#=> 1.2

结构
${
名称
##
模式
}
删除与全局模式匹配的参数
$
名称内容中最长的前缀,只保留其后面的内容。

假设要从字符串中提取数字和点:

input="product_name_v1.2_more_stuff_here"
echo "${input//[^0-9.]/}"
1.2

假设要从字符串中提取数字和点:

input="product_name_v1.2_more_stuff_here"
echo "${input//[^0-9.]/}"
1.2

不只是bash;这是兼容POSIX sh的。请参阅谢谢@charlesduff.Updated。不只是bash;这是兼容POSIX sh的。请参阅谢谢@charlesduff.Updated。