gpt4 book ai didi

regex - ls 和正则表达式 linux

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:48 32 4
gpt4 key购买 nike

我有两个目录:

  1. run.2016-02-25_01.
  2. run.2016-02-25_01.47.04

这两个目录都位于一个名为 gte 的公共(public)目录下。

我想要一个没有点字符 . 结尾的目录。

我正在使用以下命令,但是,我无法使其工作:

ls run* | grep '.*\d+' 

命令找不到任何东西。

最佳答案

shell globbing 中的否定字符集使用 ! 而不是 ^:

ls -d run*[!.]

(^ 曾经是 | 的古老同义词。)-d 选项列出目录名称,而不是目录的内容那些目录。


您尝试使用:

ls run* | grep '.*\d+'

需要启用 PCRE 的 grep 和 PCRE 正则表达式选项 (-P),并且您正在寻找零个或多个后跟一个或多个数字的任意字符,这不是你说的你想要的。你可以使用:

ls -d run* | grep '[^.]$'

它不需要 PCRE 正则表达式,但简单地让 shell glob 具有正确的名称可能是最好的。

如果您担心可能没有名称以 run 开头并以点以外的其他内容结尾,您应该考虑 shopt -s nullglob,如前所述在 Anubhavaanswer .但是,请注意下面 hek2mgl 之间的讨论和我自己的潜在混淆行为,特别是 ls 命令与 shopt -s nullglob 的结合。如果您正在使用:

for name in run*[!.]
do

done

那么 shopt -s nullglob 就完美了;当 glob 表达式不匹配时,循环迭代零次。当 glob 表达式是诸如 ls 之类的命令的参数时,它就不太好了,这些命令在没有命令行参数的情况下提供默认行为。

关于regex - ls 和正则表达式 linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35634395/

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