【问题标题】:Ls command KornShellls 命令 KornShell
【发布时间】:2013-05-22 07:53:27
【问题描述】:

我有一个名为 .dir 的文件夹。当我输入 ls -al | grep .dir 时,它会找到它并向我显示结果,但是当我输入 ls -al | grep *dir 或 (*i*, *d*) 时,它什么也没有显示。我不明白为什么它找不到任何匹配项。

【问题讨论】:

    标签: shell unix grep ksh


    【解决方案1】:

    当您执行grep *dir 时,可能会发生两件事:

      1234563此外,行为会有所不同,具体取决于只有一个文件或多个文件...
    1. 没有以dir 结尾的非隐藏文件,则*dir 不展开而是用作grep 调用中的正则表达式。但是 grep 中的星号用于多次重复最后一次匹配,并且由于没有前一个字符,它代表它自己。结论:grep 正在寻找“*dir”,字面意思。

    对于第一个问题,只需使用引号。第二次使用.*dir.代表任意字符):

    ls -la | grep ".*dir"
    

    或者,如果您只想查看您的目录:

    ls -la | grep "\.dir"
    

    请注意,如果您不使用\ 转义.,它还会显示adir_dir 等文件...

    【讨论】:

      【解决方案2】:
      • 在传递给grep 之前,未加引号的星号是expanded。这意味着如果您的目录为空,除了.dir 目录,传递给grep 的字符串取决于dotglobnullglob 设置的状态(在Bash 中;我不知道它们的Korn shell 等效项) :

        $ cd -- "$(mktemp -d)"
        $ mkdir .dir
        $ shopt -u dotglob nullglob
        $ echo *dir
        *dir
        $ shopt -s nullglob
        $ echo *dir
        
        $ shopt -s dotglob
        $ echo *dir
        .dir
        
      • grep 适用于 regular expressions,而不是 globs* 是一个有效的 glob,但不是一个有效的正则表达式,前面没有任何内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-09
        • 2018-01-03
        • 1970-01-01
        相关资源
        最近更新 更多