我有一个包含多个值输出的字符串,如下所示:
SD performance read=1450kB/s write=872kB/s no error (0 0), ManufactorerID 27 Date 2014/2 CardType 2 Blocksize 512 Erase 0 MaxtransferRate 25000000 RWfactor 2 ReadSpeed 22222222Hz WriteSpeed 22222222Hz MaxReadCurrentVDDmin 3 MaxReadCurrentVDDmax 5 MaxWriteCurrentVDDmin 3 MaxWriteCurrentVDDmax 1
我想使用bash和sed仅输出读取值(1450kB / s)。 我试过了
sed 's/read=\(.*\)kB/\1/'
但输出读数= 1450kB,但我只想要数字。 谢谢你的帮助。
答案 0 :(得分:3)
示例输入缩短为演示:
$ echo 'SD performance read=1450kB/s write=872kB/s no error' | sed 's/read=\(.*\)kB/\1/'
SD performance 1450kB/s write=872/s no error
$ echo 'SD performance read=1450kB/s write=872kB/s no error' | sed 's/.*read=\(.*\)kB.*/\1/'
1450kB/s write=872
$ echo 'SD performance read=1450kB/s write=872kB/s no error' | sed 's/.*read=\([0-9]*\)kB.*/\1/'
1450
.*
*
贪婪,会尝试尽可能匹配,所以在第二个例子中可以看出它甚至匹配write
read=
之后的数字,因此请使用[0-9]
代替.
答案 1 :(得分:1)
运行
sed 's/read=\(.*\)kB/\1/'
将read=[digits]kB
替换为[digit]
。如果要替换整个字符串,请使用
sed 's/.*read=\([0-9]*\)kB.*/\1/'
代替。
正如Sundeep注意到的那样,sed不支持非贪婪模式,而是更新为[0-9]*