ルックアラウンドを使用できる場合は、受け入れられた回答で問題ありません。ただし、この問題を解決する別の方法もあります。
この質問に対して広く提案されている正規表現を見てみると、
.*[^a]$
それはほとんど動作することがわかります。空の文字列は受け入れられません。これは少し不便かもしれません。ただし、これは1文字だけを扱う場合のマイナーな問題です。ただし、「abc」などの文字列全体を除外する場合は、次のようにします。
.*[^a][^b][^c]$
しません。たとえば、acは受け付けません。
ただし、この問題には簡単な解決策があります。簡単に言うと:
.{,2}$|.*[^a][^b][^c]$
またはより一般的なバージョン:
.{,n-1}$|.*[^firstchar][^secondchar]$
ここで、nあなたは(のために禁止したい文字列の長さであるabc
、それは3ですが)、そしてfirstchar
、secondchar
...(のためのあなたの文字列の第一、第二... n番目の文字であるabc
ことは次のようになりa
、その後、b
その後、c
)。
これは、禁止しないテキストよりも短い文字列には、定義上このテキストを含めることができないという単純な観察から来ています。したがって、短いもの( "ab"は "abc"ではない)を受け入れることも、最後まで受け入れずに受け入れることができる長さを受け入れることもできます。
.jpg以外のすべてのファイルを削除するfindの例を次に示します。
find . -regex '.{,3}$|.*[^.][^j][^p][^g]$' -delete