在 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 , }'
我在做:
$> 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 , }'