30

私は現在、何かが特定のファイルタイプ(たとえばzip)であるかどうかを確認するために、入力をgrepするスクリプトを作成しようとしていますが、ファイルタイプの前のテキストは何でもかまいません。

something.zip
this.zip
that.zip

すべてがカテゴリに分類されます。ワイルドカードを使用してこれらをgrepしようとしていますが、これまでにこれを試しました

grep ".*.zip"

しかし、それを行うと、ファイルは問題なく検出されますが、たとえば.zip、その後に追加の文字がある場合、またはgrepによって取得される場合は、出力が表示されます。そうは言っても、grepが?の後に追加の文字を含む一致を表示しないようにするにはどうすればよいですか?.zip.zippppppp.zipdsjdskjc.zip

4

11 に答える 11

81

行の終わりをバックスラッシュでテストし$、2番目.をエスケープして、ピリオドのみに一致し、どの文字にも一致しないようにします。

grep ".*\.zip$"

ただし、現在のディレクトリ内のすべてのファイル、または現在のディレクトリから始まる(および現在のディレクトリを含む)サブディレクトリ内のls *.zipすべてのファイルを一覧表示する場合は、これを行うためのより自然な方法です。 .zipfind . -name "*.zip".zip

于 2012-11-11T21:53:17.853 に答える
16

UNIX では、次を試してください。

find . -type f -name \*.zip
于 2012-11-11T21:59:22.463 に答える
5

あなたはいくつかのことをする必要があります。次のようになります。

grep '.*\.zip$'

2番目のドットをエスケープする必要があるため、ドットと一致し、文字は一致しません。一重引用符を使用すると、エスケープが少し簡単になります。

行の終わりに「zip」を表示することを示すには、行の終わりにドル記号が必要です。

于 2012-11-11T21:54:06.197 に答える
2

試す:grep -o -E "(\\.([A-z])+)+"

これを使用して、マルチドット/複数の拡張機能を取得しました。したがって、入力が の場合、出力はhello.tar.gzになります.tar.gz。シングル ドットの場合は、 を使用しますgrep -o -E "\\.([A-z])+$"。Cygwin/MingW+MSYS でテスト済み。

于 2013-08-21T00:41:04.223 に答える
2

現在のフォルダーで検索したいだけなら、 grep なしでこの単純なコマンドを使用してみませんか?

ls *.zip 
于 2020-01-10T15:56:05.707 に答える
0

単に行う:

grep ".*.zip$"

「$」は行末を示します

于 2012-11-11T21:54:04.823 に答える