V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lasuar
V2EX  ›  Z shell

[shell] 关于通配符的两点疑问

  •  
  •   lasuar · 2019-11-18 12:00:47 +08:00 · 6540 次点击
    这是一个创建于 1826 天前的主题,其中的信息可能已经有所发展或是发生改变。

    a=abc12334859348759758913947234723...[999 个或未知个数字]

    1. 在数字是未知个情况下,如何贪婪匹配将所有数字匹配出来?
    2. 在数字是已知个数时,如何匹配指定个数的数字?

    通配符可以解决这两个问题吗,感谢大佬解答!

    第 1 条附言  ·  2019-11-18 14:30:29 +08:00

    解决了,这里贴一下给有相同疑问的同学。

    Example

    #shopt -s extglob 首先开启扩展的模式匹配符支持
    #touch abc123235357283492347.txt
    #touch abcefg.txt
    #ls abc*([0-9]).txt   或者 ls abc+([0-9]).txt 可以匹配第一个txt
    #ls abc*([0-9]|[a-z]).txt   或者 ls abc+([0-9]|[a-z]).txt 可以匹配两个txt

    说明

    这里的*(pattern-list),+(pattern-list)就是扩展支持的模式匹配符,语义分别是匹配任意个pattern-list中的pattern,匹配至少1个pattern-list中的pattern。(pattern-list中的pattern以 | 分隔)。

    官方手册

    http://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Pattern-Matching

    5 条回复    2019-11-18 13:17:10 +08:00
    kutata
        1
    kutata  
       2019-11-18 12:12:55 +08:00
    Javascript:

    ```javascript
    'abc13711112222bcd1234'.match(/[0-9]+/g)
    'abc13711112222bcd1234'.match(/[0-9]{11}/g) // 匹配 11 位长度
    ```

    这个实在太基础了,其实百度一下就有
    imn1
        2
    imn1  
       2019-11-18 12:31:29 +08:00
    @kutata
    这个节点是 shell/zsh
    fzinfz
        3
    fzinfz  
       2019-11-18 12:34:47 +08:00 via Android
    "grep -P" 正则表达式
    lasuar
        4
    lasuar  
    OP
       2019-11-18 13:01:56 +08:00
    @fzinfz 正则是可以轻松解决,想知道通配符行不行,如果不行的话,就得去查一下为什么了。
    lasuar
        5
    lasuar  
    OP
       2019-11-18 13:17:10 +08:00
    @kutata 注意是 shell 中的通配符写法哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5638 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:37 · PVG 09:37 · LAX 17:37 · JFK 20:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.