在 linux 中使用 SED 从输出中获取特定行

Get a specific line from an output using SED in linux

我在做:

$> 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 , '}    
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。

您可以使用下面的 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 ,;exit}'
11% /data/WAS/7.0/wasap03
df -kh | sed -n '/\/data\/WAS\/7.0\/wasap03/ {s/.*[[:space:]]\([0-9]*%\)//p;q;}'
11% /data/WAS/7.0/wasap03

我建议改用 awk,因为我假设 % 在 awk 与字段一起工作的行中是单独的(与路径中的 space 相同的问题,但你可以假设不是由于你的过滤器)

如果要匹配行尾:

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

使用 awk(这样您就可以避免通过管道传输到 awk 来获取字段 5 和 6:

df -kh | awk 'match([=11=],"/data/WAS/7.0/wasap03$"){print , }'