Shell-Script

shell glob 中的“或”

  • July 22, 2018

我想 ls 文件名中包含子字元串“s1r”、“s2r”、“s3r”或“s19r”的文件。

我快到了!

拙劣的嘗試:

ls *s[123][9?]r*

以上只給了我包含子字元串的文件

s19r

儘管

ls *s[1-3]|[19]r*

返回

-重擊:

$$ 19 $$r*: 找不到命令 ls: * 小號

$$ 1-3 $$: 沒有相應的文件和目錄

也就是說,它不辨識 or | 運算符 - 這很有意義,因為它也用於管道。

如何 ls 包含“s1r”、“s2r”、“s3r”或“s19r”的文件?

使用ls *s1r* *s2r* *s3r* *s19r*.

如果您關心不存在的文件,您可以設置 nullglob 選項:

         nullglob
                 If  set,  bash allows patterns which match no files (see
                 Pathname Expansion above) to expand to  a  null  string,
                 rather than themselves.

如果您的 shell 不是 bash,則可能有類似的方法。看看它的手冊頁。

你可能想試試這個:

ls *s?([123])r* *s19r*

例如

我有一個包含以下文件的目錄:

% ls | column
s10r    s12r    s14r    s16r    s18r    s1r s2r s4r s6r s8r
s11r    s13r    s15r    s17r    s19r    s23r    s3r s5r s7r s9r

使用上面提到的 ls:

% ls *s?([123])r* *s19r*
s19r  s1r  s2r  s3r

有關更多詳細資訊,請參閱有關模式匹配的 bash 手冊

引用自:https://unix.stackexchange.com/questions/73510