【问题标题】:grep for words containing both uppercase and lowercase lettersgrep 查找同时包含大写和小写字母的单词
【发布时间】:2017-09-20 14:12:59
【问题描述】:

我正在转换一堆 (Progress) 程序以在 linux 上使用(以前在 Windows 上使用),我正在寻找一种方法来 grep 使用大写和小写字母的程序名称,例如“skip_xref.I ”或“NO_dt2.i”。 我怎样才能做到这一点?

【问题讨论】:

    标签: grep uppercase lowercase


    【解决方案1】:

    这个正则表达式应该有帮助:

     [a-z].*[A-Z]|[A-Z].*[a-z]
    

    如果你想使用 grep:

    grep '[a-z].*[A-Z]\|[A-Z].*[a-z]'
    

    grep -E '[a-z].*[A-Z]|[A-Z].*[a-z]'
    

    【讨论】:

    • 我建议在 grep 前加上 LANG=C ,因为它不适用于我的默认 LANG=en_US.UTF-8
    • 感谢您的建议。如果我想将 grep 限制为包含 . (点)?我要查找的名称通常以点结尾,后跟单个字符:Program.I 或 aFileName.p
    • @Kent 使用你建议的命令,结果我得到了所有程序中的所有行。
    • @Mark 你没有使用带点的图案,是吗? [a-z].*.......我的意思是答案中的模式。
    • @Kent no 我是这样使用它的:grep '[.].$'| grep -E '[a-z].*[A-Z]|[A-Z].*[a-z]' * |更多
    【解决方案2】:

    我不是在回答模棱两可的问题,但你可以使用 grep -i 的不区分大小写标志,

    例如docker help build | grep -i dockerfile 它仍然会找到“Doc​​kerfile”。

    【讨论】:

      【解决方案3】:

      您可以使用ls -l |grep 'pattern1\|pattern2'
      (假设您在要搜索程序的目录中)

      进行网络搜索以阅读更多关于一般regex 基础知识的信息,以获得您需要的模式。

      【讨论】:

        【解决方案4】:

        要查找不能使用 grep 的文件名,您需要使用 find。

        您可以在 find 中使用正则表达式,但您需要匹配整个路径。以.*/\ 开始比赛会解决问题,所以没什么大不了的。

        然后:

        find . -regex ".*/.*[a-z]+.*[A-Z]+*.*"
        

        将匹配至少有一个小写字符后跟一个大写字符的文件名。

        如果您使用 group 来获得这种模式并且相反(切换小写和大写),您应该得到所有匹配项:

        find . -regex ".*/\(\(.*[a-z]+.*[A-Z]+\)\|\(.*[A-Z]+.*[a-z]+\)\).*"
        

        【讨论】:

        • 我绝对想使用 grep。我想在某个文件夹中的所有文件中搜索可能是程序名称并且由小写和大写字母组成的文本
        猜你喜欢
        • 1970-01-01
        • 2016-08-18
        • 2014-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多