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 / 问题 / 731759
Accepted
lobi
lobi
Asked: 2015-10-27 10:07:23 +0800 CST2015-10-27 10:07:23 +0800 CST 2015-10-27 10:07:23 +0800 CST

无法使用 grep 正则表达式搜索包含句点的文件名

  • 772

Ubuntu 14.x。使用 grep 搜索所有文件linuxtest-client2。这包括多个文件扩展名(csr、crt、key)。当我 grep 查找文件名的中间部分“2.”时,它还会返回除“2”之外还包含“2”的行。使用 ls -l 时。这会导致返回的结果在文件大小、日期和时间中具有“2”。

当文件大小之后没有句点时,为什么文件大小会被这个 grep 触发?:

root@ip-10-198-0-205:/etc/easy-rsa# ls -ltr keys/ | grep -E '*2.*'
total 228
-rw------- 1 root root 3272 Oct 15 18:28 ca.key
-rw-r--r-- 1 root root 2451 Oct 15 18:28 ca.crt
-rw------- 1 root root 3268 Oct 15 18:31 server.key
-rw-r--r-- 1 root root  769 Oct 15 18:42 dh4096.pem
-rw-r--r-- 1 root root 8244 Oct 19 15:36 02.pem
-rw-r--r-- 1 root root 8250 Oct 19 19:21 03.pem
-rw------- 1 root root 3394 Oct 23 19:48 removemetest.key
-rw-r--r-- 1 root root 1785 Oct 23 19:48 removemetest.csr
-rw-r--r-- 1 root root 8264 Oct 23 19:48 removemetest.crt
-rw-r--r-- 1 root root 8264 Oct 23 19:48 04.pem
-rw------- 1 root root 3394 Oct 23 20:50 revoketest449.key
-rw-r--r-- 1 root root 1789 Oct 23 20:50 revoketest449.csr
-rw-r--r-- 1 root root 8270 Oct 23 20:50 revoketest449.crt
-rw-r--r-- 1 root root 8270 Oct 23 20:50 05.pem
-rw-r--r-- 1 root root 3633 Oct 23 20:50 revoke-test.pem
-rw-r--r-- 1 root root 1182 Oct 23 20:50 crl.pem
-rw------- 1 root root 3394 Oct 23 20:54 linuxtest-client1.key
-rw-r--r-- 1 root root 1793 Oct 23 20:54 linuxtest-client1.csr
-rw-r--r-- 1 root root    3 Oct 23 20:54 serial.old
-rw-r--r-- 1 root root 8287 Oct 23 20:54 linuxtest-client1.crt
-rw-r--r-- 1 root root  909 Oct 23 20:54 index.txt.old
-rw-r--r-- 1 root root   21 Oct 23 20:54 index.txt.attr.old
-rw-r--r-- 1 root root 8287 Oct 23 20:54 06.pem
-rw------- 1 root root 3394 Oct 26 17:57 linuxtest-client2.key
-rw-r--r-- 1 root root 1793 Oct 26 17:57 linuxtest-client2.csr
-rw-r--r-- 1 root root    3 Oct 26 17:57 serial
-rw-r--r-- 1 root root 8287 Oct 26 17:57 linuxtest-client2.crt
-rw-r--r-- 1 root root   21 Oct 26 17:57 index.txt.attr
-rw-r--r-- 1 root root 1058 Oct 26 17:57 index.txt
-rw-r--r-- 1 root root 8287 Oct 26 17:57 07.pem

但是如果我不在 ls 上使用 -l,那么它会返回我正在寻找的正确结果,所以很明显我的正则表达式是正确的:

root@ip-10-198-0-205:/etc/easy-rsa# ls keys/ | grep -E '*2.*'
02.pem
linuxtest-client2.crt
linuxtest-client2.csr
linuxtest-client2.key
regex
  • 1 1 个回答
  • 1116 Views

1 个回答

  • Voted
  1. Best Answer
    Eric Renouf
    2015-10-27T10:27:50+08:002015-10-27T10:27:50+08:00

    Grep 默认将模式视为基本正则表达式,这意味着.将匹配任何单个字符。您可以直接转义.以使其表示字面句点。

    ls -l | grep "2\."
    

    会给你你正在寻找的东西,或者你可以告诉你grep只搜索固定字符串,而不是正则表达式,比如

    ls -l | grep -F "2."
    

    既然你给了 grep-E标志,它实际上会尝试使用扩展的正则表达式,但是你似乎正在使用 shell 通配符,这并不意味着它们在正则表达式中的作用。*in regex 表示前一个组或字符的 0 个或多个,并且表示.任何字符,因此.*在 regex 中表示任何字符的 0 个或多个。所以grep -E "*2.*"真的是一样的,grep 2这就是为什么它在ls -l版本中匹配了这么多额外的东西

    当然,你可以让 shell 用通配符为你处理它

    ls -l *2.*
    
    • 2

相关问题

  • 通过正则表达式对终端进行全局着色

  • 用于正则表达式替换的 Bash 命令

  • 将执行 Perl REGEX 扩展的 Lex Flex 变体

  • AWSStats 忽略除一个子目录以外的所有子目录

  • 使用正则表达式在 linux 中重命名文件

Sidebar

Stats

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

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

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

    • 9 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

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

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +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