我的输出格式为
好的:CpuUser = 0.11; CpuNice = 0.00; CpuSystem = 0.12; CpuIowait = 0.02; CpuSteal = 0.00;
我想得到CpuIowait = 0.12作为输出。我想grep只是一个特定的子字符串。 我该怎么做?
答案 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]}"