如何在一个变量赋值的行中GREP一个子字符串?

时间:2012-03-16 21:39:02

标签: bash shell

我的输出格式为

  

好的:CpuUser = 0.11; CpuNice = 0.00; CpuSystem = 0.12; CpuIowait = 0.02; CpuSteal = 0.00;

我想得到CpuIowait = 0.12作为输出。我想grep只是一个特定的子字符串。 我该怎么做?

4 个答案:

答案 0 :(得分:10)

您可以使用-o(“only”)标志。这个命令:

grep -o 'CpuIowait=[^;]*'

将打印出与CpuIowait=[^;]*匹配的特定子字符串,而不是打印出包含它们的整行。

答案 1 :(得分:3)

如果您想使用grep,请尝试以下方法:

echo "OK: CpuUser=0.11; CpuNice=0.00; CpuSystem=0.12; CpuIowait=0.02; CpuSteal=0.00;" | grep -oE "CpuIowait=[[:digit:]]*\.[[:digit:]]*"

答案 2 :(得分:2)

如果您没有使用grep设置,则可以将输入传递给sed:

sed -ne“s / ^。(CpuSystem = [0-9。] );。* $ / \ 1 / p;”

答案 3 :(得分:1)

获取整个字符串:

var=$(grep -Eo 'CpuIowait=[0-9]{1,2}[.][0-9]{2}' < <(command))

要获得该值,如果您使用-P的GNU grep,则可以使用以下内容:

var=$(grep -Po '(?<=CpuIowait=).*(?=;)' < <(command))

使用awk:

var=$(awk -F'; |: ' '{ for (i=0;i<=NF;i++) { split($i,arr,/=/); if (arr[1] ==  "CpuIowait") { print arr[2] } } }' < <(command))

使用纯粹的bash:

output=$(command)
[[ $output =~ (CpuIowait=[0-9][.][0-9]{2}) ]] && echo "${BASH_REMATCH[1]}"