Grep 不理解空格分隔符?

Grep 不理解空格分隔符?

在以下示例中:

apt-file search apache2.conf | grep -E "apache2.conf\b"

输出:

apache2: /etc/apache2/apache2.conf
apache2-doc: /usr/share/doc/apache2-doc/examples/apache2/apache2.conf.gz
dicoweb: /etc/dicoweb/apache2.conf
emboss-explorer: /etc/apache2/conf-available/emboss-explorer.apache2.conf
emboss-explorer: /etc/emboss-explorer/apache2.conf
icinga-cgi: /usr/share/doc/icinga-cgi/examples/apache2.conf
icinga-cgi: /usr/share/icinga/apache2.conf
icinga2-classicui: /etc/icinga2-classicui/apache2.conf
kopano-webapp-apache2: /etc/apache2/conf-available/kopano-webapp-apache2.conf
kopano-webapp-apache2: /etc/kopano/webapp/apache2.conf
lacme: /etc/lacme/apache2.conf
lemonldap-ng-handler: /etc/apache2/sites-available/handler-apache2.conf
libjs-twitter-bootstrap: /usr/share/twitter-bootstrap/apache2.conf
liblemonldap-ng-manager-perl: /etc/apache2/sites-available/manager-apache2.conf
liblemonldap-ng-portal-perl: /etc/apache2/sites-available/portal-apache2.conf
mirmon: /usr/share/doc/mirmon/examples/mirror-apache2.conf
nagios3-cgi: /usr/share/nagios3-cgi/apache2.conf
oar-restful-api: /usr/share/oar/oar-api/apache2.conf
octopussy: /etc/octopussy/apache2.conf
spip: /usr/share/doc/spip/apache2.conf

为什么不grep理解\bas 单词边界并合并这一行:

apache2-doc: /usr/share/doc/apache2-doc/examples/apache2/apache2.conf.gz

使用和不使用 的扩展 ( -E) 版本都会出现相同的结果grep

答案1

A字边界是从单词字符到非单词字符的转换 - 这与从单词字符到空格的转换不同。

man grep

单词组成字符是字母、数字和下划线。

因为.是非单词字符conf\b匹配“conf后跟.”。

答案2

@steeldriver 已经解释了这\b是怎么回事,我只是添加它apt-file search本身支持扩展正则表达式的选项-x,并且您可以查找路径结尾apache2.conf

apt-file search -x 'apache2\.conf$'

你还可以这样做:

apt-file search -x 'apache2\.conf(\s|$)'

要查找以空格结尾apache2.conf或包含apache2.conf后跟空格的路径,但我怀疑这会产生任何影响,因为我不希望apt-file数据库中的任何文件包含apache2.conf<whitespace>.

相关内容