使用Linux中的SED从输出中获取特定行

时间:2015-02-13 12:00:12

标签: awk sed

我正在做:

$> df -kh | sed -n '/\/data\/WAS\/7.0\/wasap03/p'    
/dev/xxxxx/xxxxx          5.0G  490M  4.2G  11% /data/WAS/7.0/wasap03    
/dev/xxxxx/xxxxxxx  3.5G   72M  3.3G  3% /data/WAS/7.0/wasap03/xxxx/xxxx    
/dev/xxxxxx/xxxxxxxxxx  3.5G   72M  3.3G 3% /data/WAS/7.0/wasap03/xxxx/xxxx/xxxx    

$> df -kh | sed -n '/\/data\/WAS\/7.0\/wasap03/p' | awk {'print $5, $6'}    
11% /data/WAS/7.0/wasap03    
3% /data/WAS/7.0/wasap03/xxxxx/xxxxx    
3% /data/WAS/7.0/wasap03/xxxxx/xxxx/xxxxx

我的问题是我只需要整行只包含/data/WAS/7.0/wasap03,即输出应仅为 - > 11% /data/WAS/7.0/wasap03,仅此而已。请不要说使用head -1,我只需通过sed。

3 个答案:

答案 0 :(得分:1)

如果你想匹配行尾:

df -kh | sed -n '\@/data/WAS/7.0/wasap03$@p'

使用awk(这样你就可以避免使用awk来获取字段5和6:

df -kh | awk 'match($0,"/data/WAS/7.0/wasap03$"){print $5, $6}'

答案 1 :(得分:0)

您可以使用以下sed命令仅打印第一个匹配项

$ df -kh | sed -n '0,/\/data\/WAS\/7.0\/wasap03/p'
/dev/xxxxx/xxxxx          5.0G  490M  4.2G  11% /data/WAS/7.0/wasap03

通过awk,

$ df -kh | awk '/\/data\/WAS\/7.0\/wasap03/{print;exit}' 
/dev/xxxxx/xxxxx          5.0G  490M  4.2G  11% /data/WAS/7.0/wasap03
$ df -kh | awk '/\/data\/WAS\/7.0\/wasap03/{print $5,$6;exit}'
11% /data/WAS/7.0/wasap03

答案 2 :(得分:0)

df -kh | sed -n '/\/data\/WAS\/7.0\/wasap03/ {s/.*[[:space:]]\([0-9]*%\)/\1/p;q;}'
11% /data/WAS/7.0/wasap03

我建议使用awk,因为我假设%在awk使用字段的行中是单独的(路径中有空格的同类问题,但你可以假设不是由于你的过滤器)