私のディレクトリは次のとおりです。
$ 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
file2
bashワイルドカードを使用して一致させたいのですがfile6
。入らないようにする file3
。
and
複数のパターンに一致する演算子を見つけることができないので、a AND b
同等のDe Morganの法則を使用すればよいと思いました。!(!a OR !b)
!(!(file[2-6])|file3)
期待どおりに動作します。
$ echo !(!(file[2-6])|file3)
file2 file4 file5 file6
これを達成するためのより簡単で直接的な方法はありますか?
ベストアンサー1
2つの範囲を適用できます[24-6]
。ここで2
は最初と4-6
2番目は次のようになります。
$ ls file[24-6]
file2 file4 file5 file6
他の例:
$ ls file[2356]
file2 file3 file5 file6
範囲
特別なルールがあります。 「-」で区切られた2文字は範囲を表します。 (したがって、「[A-Fa-f0-9]」は「[ABCDEFabcdef0123456789]」と同じです。)「-」を括弧の間の最初または最後の文字として使用して、文字通りの意味を含めることができます。 (「[]-]」は「]」と「-」の2文字のみと一致し、「[--0]」は「-」、「。」、「0」の3文字と一致します。 / "と一致できません。)