grep不匹配包含问号的行

grep不匹配包含问号的行,grep,Grep,我想通过使用获取当前正在运行的所有服务的名称 sudo service --status-all | grep -E '[A-Za-z0-9-]+$' 在我看来,它应该从输出中选择正确的子字符串,但出于某种原因,所有以 [ ? ] 不匹配?问题是,具有[?]的管道位于stderr而不是stdout上,因此grep无法看到它们使用|和对两个管道进行grep查看以下示例: service --status-all |& grep -E '[A-Za-z0-9\.-]+$' 请注意,我还

我想通过使用获取当前正在运行的所有服务的名称

sudo service --status-all | grep -E '[A-Za-z0-9-]+$'
在我看来,它应该从输出中选择正确的子字符串,但出于某种原因,所有以

[ ? ]

不匹配?

问题是,具有
[?]
的管道位于stderr而不是stdout上,因此grep无法看到它们使用
|和
对两个管道进行grep查看以下示例:

service --status-all |& grep -E '[A-Za-z0-9\.-]+$'

请注意,我还使用
\.
稍微更改了您的正则表达式,因为像
rc.local
这样的服务不会被您原来的服务接受。

您能举一个这样(不匹配)行的例子吗?如果您修改模式以在行尾包含可选空格,或者
服务-状态全部2>&1 | grep-E'[A-Za-z0-9-]+$”
,会发生什么情况。