gpt4 book ai didi

regex - 为什么在对 ps 进行 grepping 时,将单个字符括在正则表达式中的括号中会排除 grep 本身?

转载 作者:行者123 更新时间:2023-12-04 23:55:24 28 4
gpt4 key购买 nike

如果我在 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”一词在 grep 的 args 中。

但是,如果我将 [] 放在“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 .

关于regex - 为什么在对 ps 进行 grepping 时,将单个字符括在正则表达式中的括号中会排除 grep 本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17109176/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com