【问题标题】:glob in solaris cshsolaris csh中的glob
【发布时间】:2011-09-21 04:39:48
【问题描述】:

我想列出所有以 .在当前目录中。我不想列出以前的目录 (..),所以我有 regular expression 类似的东西。我正在使用 csh

ls .[^.]*

它在 UNIX 变体平台上运行良好,但在 solaris 中,我仍在使用 csh 但它只列出了我的 .. 目录。如何在 Solaris 中指定具有确切功能的 正则表达式。它在 bash 中工作,但我只能使用 csh,因为它保证在我们组织中的每个 SOLARIS 机器上都可用。

【问题讨论】:

  • grymoire.com/Unix/CshTop10.txtHTH。我无法想象为什么你的所有 solaris 盒子上都没有 bourne shell。
  • 在 Solaris 9 上确认。我建议改用 tcsh,但如果你不能指望 bash,我想你不能指望 tcsh。顺便说一句,这是一个文件匹配模式,而不是正则表达式。我认为grep,正如mu太短所建议的那样,是你最好的选择。

标签: solaris glob csh


【解决方案1】:

您可以使用/bin/sh 执行此操作,但语法略有不同;它使用! 而不是^ 来否定字符集:

ls .[!.]*

请注意,这是一个文件匹配模式(glob),而不是正则表达式。

但鉴于您在各种 shell 支持的 glob 语法中看到的变化,您最好将 grep 与实际的正则表达式一起使用。

【讨论】:

    【解决方案2】:

    csh?哇,我不知道他们仍然这样做 :) 你的 ls .[^.]* 在 OSX 的 csh 上工作,所以我不知道 Solaris csh 发生了什么。粗略的备份是这样的:

    ls `ls -a | grep '^\.[^.].*'`
    

    -a 用于ls 告诉它在列表中包含所有点文件,然后是一些grep 用于处理点。这与ls .[^.]* 在 OSX 的 csh 中所做的相匹配,希望它也适用于 Solaris。

    【讨论】:

      【解决方案3】:

      csh 中 glob 中的字符类不支持否定...

      来自 Solaris 的手册页:

       [...] Match any single character in the enclosed list(s)  or
             range(s).  A  list is a string of characters.  A range
             is  two  characters  separated  by  a  dash  (-),  and
             includes  all  the  characters in between in the ASCII
             collating sequence (see ascii(5)).
      

      所以...您可以创建一个字符类,其范围从 \040(空格)到 '-'('.' 之前的字符,然后从 '/' 到 '~'(其余可打印的 ascii 字符) )。

      ls -a .[\ --/-~]*
      

      这似乎对我有用,但我没有用细齿梳检查输出。

      【讨论】:

        猜你喜欢
        • 2020-09-07
        • 2023-04-03
        • 1970-01-01
        • 2015-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多