如何从字符串中提取子字符串

发布于 2024-12-04 12:09:52 字数 334 浏览 2 评论 0原文

我有一个字符串,它看起来并不总是相同,并且我想从这个字符串中提取一些信息(如果存在)。该字符串可能类似于以下内容之一:

myCommand -s 12 moreParameters
myCommand -s12 moreParamaters
myCommand -s moreParameters

我想获取数字,即本例中的 12(如果存在)。我怎样才能做到这一点?

非常感谢!

编辑:字符串有第四个可能的值:

myCommand moreParameters

如何修改正则表达式以涵盖这种情况?

I have a string, that does not always look the same, and from this string I want to extract some information if it exists. The string might look like one of the following:

myCommand -s 12 moreParameters
myCommand -s12 moreParamaters
myCommand -s moreParameters

I want to get the number, i.e. 12 in this case, if it exists. How can I accomplish that?

Many thanks!

EDIT: There is a fourth possible value for the string:

myCommand moreParameters

How can I modify the regex to cover this case as well?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

剑心龙吟 2024-12-11 12:09:52
$ a="myCommand -s 12 moreParameters"
$ b="myCommand -s12 moreParamaters"
$ echo $(expr "$a" : '[^0-9]*\([0-9]*\)')
12
$ echo $(expr "$b" : '[^0-9]*\([0-9]*\)')
12
$ a="myCommand -s 12 moreParameters"
$ b="myCommand -s12 moreParamaters"
$ echo $(expr "$a" : '[^0-9]*\([0-9]*\)')
12
$ echo $(expr "$b" : '[^0-9]*\([0-9]*\)')
12
七颜 2024-12-11 12:09:52

试试这个:

n=$(echo "$string"|sed 's/^.*-s *\([0-9]*\).*$/\1/')

这将匹配 -s 最后跟上空格和数字;并将整个字符串替换为数字。

myCommand -s 12 moreParameters =>; 12
myCommand -s12 更多参数 => 12
myCommand -s 更多参数 =>空字符串

编辑:该字符串还有第四个可能的值:

myCommand moreParameters

如何修改正则表达式以涵盖这种情况?

Try this:

n=$(echo "$string"|sed 's/^.*-s *\([0-9]*\).*$/\1/')

This will match a -s eventually followed by spaces and digits; and replace the whole string by the digits.

myCommand -s 12 moreParameters => 12
myCommand -s12 moreParamaters  => 12
myCommand -s moreParameters    => empty string

EDIT: There is a fourth possible value for the string:

myCommand moreParameters

How can I modify the regex to cover this case as well?

长发绾君心 2024-12-11 12:09:52

您无需外部工具即可完成所有这些工作

$ shopt -s extglob
$ string="myCommand -s 12 moreParameters"
$ string="${string##*-s+( )}"
$ echo "${string%% *}"
12

You can do all these without the need for external tools

$ shopt -s extglob
$ string="myCommand -s 12 moreParameters"
$ string="${string##*-s+( )}"
$ echo "${string%% *}"
12
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文