我试图从bash中的字符串foo
中提取"foo-bar-baz"
。
任何想法如何使用字符串替换或类似的东西(没有外部工具)。
我尝试了这个,但它没有工作:
$ str="foo-bar-baz"
$ echo ${str%-*}
foo-bar
这也行不通:
$ str="foo-bar-baz"
$ echo ${str#*-}
bar-baz
任何想法如何获得bar
?
答案 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