加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么在正则表达式中将单个字符括在括号中时,在greting ps时会

发布时间:2020-12-14 05:55:52 所属栏目:百科 来源:网络整理
导读:如果我在 Linux机器上执行以下grep: $ps -ef | grep bashroot 2286 1 0 Jun06 ? 00:03:15 /bin/bash /etc/init.d/zxy100wdwmiller 6436 6429 0 Jun06 pts/0 00:00:01 bashwmiller 10707 6429 0 Jun07 pts/1 00:00:00 bashwmiller 10795 6429 0 Jun07 pts/2
如果我在 Linux机器上执行以下grep:

$ps -ef | grep bash
root      2286     1  0 Jun06 ?        00:03:15 /bin/bash /etc/init.d/zxy100wd
wmiller   6436  6429  0 Jun06 pts/0    00:00:01 bash
wmiller  10707  6429  0 Jun07 pts/1    00:00:00 bash
wmiller  10795  6429  0 Jun07 pts/2    00:00:00 bash
wmiller  16220  6436  0 06:55 pts/0    00:00:00 grep --color=auto bash

注意最后一行是报告grep本身,因为单词“bash”在args中为grep.

但是,如果相反我把[]放在“bash”中的任何字母周围,我得到:

$ps -ef | grep ba[s]h
root      2286     1  0 Jun06 ?        00:03:15 /bin/bash /etc/init.d/zxy100wd
wmiller   6436  6429  0 Jun06 pts/0    00:00:01 bash
wmiller  10707  6429  0 Jun07 pts/1    00:00:00 bash
wmiller  10795  6429  0 Jun07 pts/2    00:00:00 bash

这次没有关于grep的信息!

那么,为什么在搜索词中附上一个字母,即正则表达式,在括号中让grep不在这里报告?我虽然[s]的意思是“包含字符”s“的封闭集中的任何字符.

解决方法

这是因为表达式ba [s] h(或[b] ash,或……)恰好与bash匹配,而不是ba [s] h(或[b] ash,或……).

所以grep命令正在寻找所有使用bash的行:

root      2286     1  0 Jun06 ?        00:03:15 /bin/bash /etc/init.d/zxy100wd
wmiller   6436  6429  0 Jun06 pts/0    00:00:01 bash
wmiller  10707  6429  0 Jun07 pts/1    00:00:00 bash
wmiller  10795  6429  0 Jun07 pts/2    00:00:00 bash

wmiller  16220  6436  0 06:55 pts/0    00:00:00 grep --color=auto ba[s]h

不匹配,因为它不完全是bash.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读