如何提取" foo"来自" foo-bar-baz"在bash中?

时间:2015-12-01 06:20:41

标签: string bash text extract string-split

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

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

我尝试了这个,但它没有工作:

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

这也行不通:

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

任何想法如何获得bar

3 个答案:

答案 0 :(得分:1)

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

输出:

foo

答案 1 :(得分:0)

您还可以使用子串替换

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

注意:,如果省略了结束/,则替换字符串将被shell视为空。

答案 2 :(得分:0)

使用Bash正则表达式匹配:

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