为什么 grep 显示不包含搜索词的输出?

为什么 grep 显示不包含搜索词的输出?

我想检查 sensu 服务是否已安装。我运行了此命令service --status-all| grep sensu,以下是输出

vagrant@vagrant-ubuntu-trusty-64:~$ service --status-all| grep sensu
 [ ? ]  apport
 [ ? ]  console-setup
 [ ? ]  cryptdisks
 [ ? ]  cryptdisks-early
 [ ? ]  dns-clean
 [ ? ]  irqbalance
 [ ? ]  killprocs
 [ ? ]  kmod
 [ ? ]  networking
 [ ? ]  ondemand
 [ ? ]  open-vm-tools
 [ ? ]  pppd-dns
 [ ? ]  rc.local
 [ ? ]  screen-cleanup
 [ ? ]  sendsigs
 [ ? ]  umountfs
 [ ? ]  umountnfs.sh
 [ ? ]  umountroot
 [ ? ]  virtualbox-guest-x11

我觉得很奇怪,grep没有过滤掉上述所有行,因为它们都不包含搜索词“sensu”

问题是:为什么?

答案1

看起来有些服务将其状态报告给 stderr:

$ service --status-all 2>&1 | wc -l
43
$ service --status-all 2>/dev/null | wc -l
28
$ service --status-all 2>&1 1>/dev/null | wc -l
15

28 到 stdout,15 到 stderr。您看到报告到 stderr 的那些,因为管道只处理 stdout。请改为执行以下操作:

service --status-all 2>&1| grep sensu

相关内容