【发布时间】:2013-02-15 10:14:27
【问题描述】:
我有一个如下所示的字符串:
GenFiltEff=7.092200e-01
使用 bash,我只想获取 = 字符之后的数字。有没有办法做到这一点?
【问题讨论】:
-
这应该重新打开。
How to grep询问您如何使用 grep 执行此操作,此问题询问如何在一个字符后获取字符串...不与grep绑定。
我有一个如下所示的字符串:
GenFiltEff=7.092200e-01
使用 bash,我只想获取 = 字符之后的数字。有没有办法做到这一点?
【问题讨论】:
How to grep 询问您如何使用 grep 执行此操作,此问题询问如何在一个字符后获取字符串...不与 grep 绑定。
如果值已经存储在变量中,则使用参数扩展。
$ str="GenFiltEff=7.092200e-01"
$ value=${str#*=}
或使用read
$ IFS="=" read name value <<< "GenFiltEff=7.092200e-01"
不管怎样,
$ echo $value
7.092200e-01
【讨论】:
${str##*=} to get from the last match. ${str#*=} to get from the first match. ${str%%=*} to get until the first match. ${str%=*} to get until the last match.[String Manipulation@tldp.org](tldp.org/LDP/abs/html/string-manipulation.html)
$ IFS="=" read name value <<< "GenFiltEff=7.092200e-01" using bash 4.4.5
#*= 中的每个人到底在做什么?
# 运算符从$str 的扩展中省略与模式*= 匹配的最短前缀。
对于第一个= 之后和下一个= 之前的文本
cut -d "=" -f2 <<< "$your_str"
或
sed -e 's#.*=\(\)#\1#' <<< "$your_str"
对于第一个 = 之后的所有文本,无论是否有多个 =
cut -d "=" -f2- <<< "$your_str"
【讨论】:
echo "GenFiltEff=7.092200e-01" | cut -d "=" -f2
【讨论】:
-s 标志以不显示任何内容
${word:$(expr index "$word" "="):1}
得到7。假设您的意思是整个字符串的其余部分,请忽略 :1。
【讨论】:
$value = ${word:$(expr index "$word" "=")} 对我来说很好,可以在等号后返回所有内容。
这应该可行:
your_str='GenFiltEff=7.092200e-01'
echo $your_str | cut -d "=" -f2
【讨论】: