【问题标题】:How to extract "foo" from "foo-bar-baz" in bash?如何从 bash 中的“foo-bar-baz”中提取“foo”?
【发布时间】:2016-03-04 23:44:54
【问题描述】:

我正在尝试从 bash 中的字符串 "foo-bar-baz" 中提取 foo

任何想法如何使用字符串替换或类似的东西(无需外部工具)。

我试过了,但没用:

$ str="foo-bar-baz"
$ echo ${str%-*}
foo-bar

这也行不通:

$ str="foo-bar-baz"
$ echo ${str#*-}
bar-baz

任何想法如何获得bar

【问题讨论】:

标签: string bash text extract string-split


【解决方案1】:
str="foo-bar-baz"
echo ${str%%-*}

输出:

【讨论】:

【解决方案2】:

你也可以利用子串替换

str="foo-bar-baz"
foostr=${str//-*/}  ## assign 'foo' to foostr
echo $foostr        ## 'foo'

注意:省略了结尾/,替换字符串被shell视为空。

【讨论】:

    【解决方案3】:

    使用 Bash 正则表达式匹配:

    #!/bin/bash
    str="foo-bar-baz"
    pat="([^-]*)-([^-]*)-.*"
    [[ $str =~ $pat ]]
    echo "${BASH_REMATCH[1]}" # foo
    echo "${BASH_REMATCH[2]}" # bar
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-04
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      • 2017-06-23
      • 1970-01-01
      相关资源
      最近更新 更多