0

Linuxで、複数の「ドット」が付いているが拡張子がIGNOREのファイルを検索するスクリプトを記述せずに、検索や正規表現などを使用するにはどうすればよいですか。

たとえば、次のファイルを検索すると、2番目のファイルのみが返されます。この例では、「。ext」が拡張子です。

testing1234hellothisisafile.ext
testing.1234.hello.this.is.a.file.ext

このソリューションは、ファイル名に1つ以上のドットが含まれている場合に機能する必要があります(拡張子ドットは無視されます)。これは、すべてのファイル、つまり任意のファイル拡張子で機能するはずです。

前もって感謝します

4

1 に答える 1

3

したがって、私の理解が正しければ、名前に少なくとも 2 つのドットを追加したファイル名を取得する必要があります。これは次のようになります。

$ find -regex ".*\.+[^.]*\.+[^.]*\.+.*"
./testing.1234.hello.this.is.a.file.ext
./testing1234.hellothisisafile.ext
$ find -regex ".*\.+[^.]*\.+[^.]*\.+[^.]*\.+.*"
./testing.1234.hello.this.is.a.file.ext

キー ドット検出部分は\.+(少なくとも 1 つのドット)、分離するもの (ドット以外、ただし前の部分で既にカバーされています。貪欲な一致に対する安全対策) と結合されています[^.]*。これらを合わせて正規表現のコア部分を構成します - 前後がどうであれ、どこかに 3 つのドットがあるだけです。現在のディレクトリの 1 つも重要であるため、3 つ - 他の場所から検索する場合は、1 つの\.+[^.]*グループを削除します。

$ find delme/ -regex ".*\.+[^.]*\.+[^.]*\.+[^.]*\.+.*"
delme/testing.1234.hello.this.is.a.file.ext
$ find delme/ -regex ".*\.+[^.]*\.+[^.]*\.+.*"
delme/testing.1234.hello.this.is.a.file.ext

この場合、名前に多くのドットが含まれているため、結果は同じですが、2 番目の正規表現が正しいものです。

于 2012-08-10T11:24:21.063 に答える