AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 51987
In Process
RBA
RBA
Asked: 2009-08-10 08:13:08 +0800 CST2009-08-10 08:13:08 +0800 CST 2009-08-10 08:13:08 +0800 CST

在使用 grep 命令时查询 unix 的正则表达式

  • 772

你好,

我无法理解 unix 终端下正则表达式中句点 (.) 运算符的完整功能。

它说它匹配任何单个字符。当我给grep 'ct' a.txt时,它返回结果,如 cat、cbt、cmt 等。它是否也应该发送任何其他类型的数据?因为我不清楚这个时期运营商的基础知识。

如果我给grep 'c[abm].t' a.txt怎么办,它没有给出预期的结果,即我认为它应该只打印 cat 或 cbt 或 cmt 但它只打印 caat,这是数据之一。请说清楚。

另外如果有任何教程,其中我可以掌握正则表达式的技能,那么请分享..非常感谢..请尝试解决我的问题..

谢谢。

unix
  • 4 4 个回答
  • 773 Views

4 个回答

  • Voted
  1. EBGreen
    2009-08-10T08:18:05+08:002009-08-10T08:18:05+08:00

    句点运算符匹配任何字符一次且仅匹配一次。因此,在您的第一个示例中,它匹配 ac 后跟一个字符,该字符是任何后跟 t 的字符。

    在您的第二个示例中,您的模式被告知要匹配 4 个并且恰好是 4 个字符。他们是:

    C

    其次是

    [abm] - 这些中的任何一个

    其次是

    . - 任何单个字符

    其次是

    吨

    至于学习正则表达式,请查看:https ://stackoverflow.com/questions/4736/learning-regular-expressions

    • 3
  2. jeff
    2009-08-10T08:20:57+08:002009-08-10T08:20:57+08:00

    在您的示例中, grep 'c[abm].t' a.txt 将输出 a.txt 中包含您指定的至少四个字符的任何行。一个“c”,一个“a”,一个“b”或一个“m”,“任何字符”,然后是一个“t”。

    'c[abm].t' 将匹配:

    cart
    caat
    ca%t
    caNt
    cm_t
    moo cbqt this whole line is returned because it contains a match
    rocbtt
    

    等等等等

    希望这可以帮助您理解您的示例。

    正则表达式可能非常复杂。除了我现在第一次找到和正在看的东西之外,我不能推荐任何东西。

    请注意,有许多不同的风格和实现,从 grep(和 egrep / grep -E)到 perl 到 php 到 Javascript 等等。

    当你和他们一起玩的时候,你会发现自己必须记住要从你的 shell 中正确地转义一些东西,并从正则表达式本身中排除其他的东西......你想要匹配文字 '.' 的地方。(句号),你需要 grep'moo\.'来匹配“moo”。而不是“moof”

    O'Reilly 的《掌握正则表达式》一书被认为是非常权威的。

    • 1
  3. Kamil Kisiel
    2009-08-10T08:20:49+08:002009-08-10T08:20:49+08:00

    正如描述所说,句点运算符匹配任何字符。所以 'ct' 将匹配 'cat', 'cbt', 'cct' ... 'czt', 'c1t' ... 等等。

    在您的第二个示例中,结果与预期的一样。[abm] 匹配任何字符 a、b 或 m。之后,句点运算符匹配任何字符。所以表达式只寻找四个字母的字符串。

    我发现学习正则表达式的最佳资源是 O'Reilly Media 的Mastering Regular Expressions。它不仅涵盖了大量的正则表达式方言,而且还深入了解了引擎如何实际进行处理。如果您要定期使用正则表达式(双关语),这是一个非常宝贵的资源。

    • 0
  4. dlamblin
    2009-08-11T15:34:05+08:002009-08-11T15:34:05+08:00

    如果您没有时间阅读有关该主题的整本书,那么尝试expresso(.net 语法)或执行 perl、ruby、java、.net 和 grep 语法(以及其他)的商业工具RegexBuddy可能会很方便. 这两种工具都可以让您测试什么会匹配和什么不会匹配,并且会向您展示正则表达式含义的树。

    对于您的问题,您的预期行为将来自c[abm]tnotc[abm].t但已经指出。

    • 0

相关问题

  • Windows 有符号链接吗?

  • 控制 UNIX 目录内容用户组所有权

  • 在命令行上从 csv 文件中过滤带有空格字符的字段

  • 如何将 VAR 从子 shell 导出到父 shell?

  • 查找文件大小(以 MB 为单位)

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve