rew*_*ire 6 bash wildcards pattern-matching
我的目录如下所示:
$ ls
total 0
-rw-r--r-- 1 user user 0 Jun 18 22:44 file0
-rw-r--r-- 1 user user 0 Jun 18 22:44 file1
-rw-r--r-- 1 user user 0 Jun 18 22:44 file2
-rw-r--r-- 1 user user 0 Jun 18 22:44 file3
-rw-r--r-- 1 user user 0 Jun 18 22:44 file4
-rw-r--r-- 1 user user 0 Jun 18 22:44 file5
-rw-r--r-- 1 user user 0 Jun 18 22:44 file6
-rw-r--r-- 1 user user 0 Jun 18 22:44 file7
-rw-r--r-- 1 user user 0 Jun 18 22:44 file8
-rw-r--r-- 1 user user 0 Jun 18 22:44 file9
Run Code Online (Sandbox Code Playgroud)
使用 bash 通配符,我想file2匹配file6,排除 file3。
由于我找不到and匹配多个模式的运算符,我想我只是使用德摩根定律,它a AND b相当于!(!a OR !b)并写
!(!(file[2-6])|file3)
Run Code Online (Sandbox Code Playgroud)
其按预期工作:
$ echo !(!(file[2-6])|file3)
file2 file4 file5 file6
Run Code Online (Sandbox Code Playgroud)
有没有更简单、更直接的方法来实现这一目标?
您可以应用两个 range [24-6],其中2是第一个,4-6是第二个:
$ ls file[24-6]
file2 file4 file5 file6
Run Code Online (Sandbox Code Playgroud)
另一个例子:
$ ls file[2356]
file2 file3 file5 file6
Run Code Online (Sandbox Code Playgroud)
范围
有一个特殊约定:用“-”分隔的两个字符表示一个范围。(因此,“[A-Fa-f0-9]”相当于“[ABCDEFabcdef0123456789]”。)可以通过将“-”作为括号之间的第一个或最后一个字符来包含其字面含义。(因此,“[]-]”仅匹配两个字符“]”和“-”,“[--0]”匹配三个字符“-”、“.”、“0”,因为“/”无法匹配。)
| 归档时间: |
|
| 查看次数: |
1998 次 |
| 最近记录: |