代码之家  ›  专栏  ›  技术社区  ›  elbarna

正则表达式仅排除小写字符串,但保存包含大写的字符串

  •  1
  • elbarna  · 技术社区  · 5 月前

    看看那些正则表达式

    find /tmp/MG/virt-manager-5.0.0/ -maxdepth 1 -type f |grep -v  [^a-z]+\.[^a-z]+
    /tmp/MG/virt-manager-5.0.0/.mailmap
    /tmp/MG/virt-manager-5.0.0/virt-manager
    /tmp/MG/virt-manager-5.0.0/DESIGN.md
    /tmp/MG/virt-manager-5.0.0/meson.build
    /tmp/MG/virt-manager-5.0.0/NEWS.md
    /tmp/MG/virt-manager-5.0.0/.gitignore
    /tmp/MG/virt-manager-5.0.0/README.md
    /tmp/MG/virt-manager-5.0.0/.pylintrc
    /tmp/MG/virt-manager-5.0.0/.coveragerc
    /tmp/MG/virt-manager-5.0.0/virt-install
    /tmp/MG/virt-manager-5.0.0/.packit.yaml
    /tmp/MG/virt-manager-5.0.0/COPYING
    /tmp/MG/virt-manager-5.0.0/virt-xml
    /tmp/MG/virt-manager-5.0.0/virt-manager.spec.in
    /tmp/MG/virt-manager-5.0.0/INSTALL.md
    /tmp/MG/virt-manager-5.0.0/meson_options.txt
    /tmp/MG/virt-manager-5.0.0/virt-manager.spec
    /tmp/MG/virt-manager-5.0.0/virt-clone
    /tmp/MG/virt-manager-5.0.0/CONTRIBUTING.md
    /tmp/MG/virt-manager-5.0.0/setup.cfg
    

    我想得到包含大写字母的字符串,包括.md.txt,但前提是单词至少包含一个大写字母,以便更好地解释

    CONTRIBUTING.MD OK
    CONTRIBUTING.txt OK
    CONTRIBUTING.TXT OK
    Contributing.txt OK (has one capital letter)
    hello.TXT OK (contain some capital letters)
    contributing.txt NO (only lowercase)
    

    我想得到这个

      find /tmp/MG/virt-manager-5.0.0/ -maxdepth 1 -type f |grep -v REGEXWORKS
    
        /tmp/MG/virt-manager-5.0.0/DESIGN.md
        /tmp/MG/virt-manager-5.0.0/NEWS.md
        /tmp/MG/virt-manager-5.0.0/README.md
        /tmp/MG/virt-manager-5.0.0/COPYING
        /tmp/MG/virt-manager-5.0.0/INSTALL.md
        /tmp/MG/virt-manager-5.0.0/CONTRIBUTING.md
    

    如何做?谢谢

    1 回复  |  直到 5 月前
        1
  •  2
  •   Gilles Quénot ticktalk    5 月前

    就像这样:

    $ find . -type f -name '*[A-Z]*' 
    ./virt-manager-5.0.0/COPYING
    ./virt-manager-5.0.0/NEWS.md
    ./virt-manager-5.0.0/INSTALL.md
    ./virt-manager-5.0.0/README.md
    ./virt-manager-5.0.0/CONTRIBUTING.md
    ./virt-manager-5.0.0/DESIGN.md
    

    这个 -type f 仅匹配文件。

    如果你更喜欢正则表达式:

    find .  | grep '/[^/]*[[:upper:]]'
    

    这可以更好地写成:

    find . -regextype 'egrep' -regex '.*/[^/]*[[:upper:]][^/]*'
    

    注: -f型 未与结合 -regex 喜欢 -name 只匹配文件名。