获取字符后的字符串

use*_*171 67 string bash extract

我有一个看起来像这样的字符串:

 GenFiltEff=7.092200e-01
Run Code Online (Sandbox Code Playgroud)

使用bash,我想在=角色后面得到数字.有没有办法做到这一点?

che*_*ner 83

如果值已存储在变量中,请使用参数展开.

$ str="GenFiltEff=7.092200e-01"
$ value=${str#*=}
Run Code Online (Sandbox Code Playgroud)

或者使用 read

$ IFS="=" read name value <<< "GenFiltEff=7.092200e-01"
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,

$ echo $value
7.092200e-01
Run Code Online (Sandbox Code Playgroud)

  • 如果字符串有多个"=":`$ {str ##*=}从最后一个匹配中获取.$ {str#*=}从第一场比赛中获得.$ {str %% =*}直到第一场比赛.$ {str%=*}直到最后一场比赛.[String Manipulation @ tldp.org](http://tldp.org/LDP/abs/html/string-manipulation.html) (18认同)
  • 如果这个答案更详细地解释,那将是很好的.每个`#*=`到底做了什么? (2认同)

Tux*_*ude 69

cut -d "=" -f 2 <<< "$your_str"
Run Code Online (Sandbox Code Playgroud)

要么

sed -e 's#.*=\(\)#\1#' <<< "$your_str"
Run Code Online (Sandbox Code Playgroud)

  • 适用于简单的情况,但是当字符串中有多个"="时,这些方法不能很好地发挥作用.Chepner的第一个解决方案简单,可靠. (8认同)

Gre*_*ida 13

echo "GenFiltEff=7.092200e-01" | cut -d "=" -f2 
Run Code Online (Sandbox Code Playgroud)


jma*_*man 6

这应该有效:

your_str='GenFiltEff=7.092200e-01'
echo $your_str | cut -d "=" -f2
Run Code Online (Sandbox Code Playgroud)


Exp*_*lls 5

${word:$(expr index "$word" "="):1}
Run Code Online (Sandbox Code Playgroud)

得到7. 假设您指的是字符串的整个其余部分,只需省略:1.