grepを使用して行末のパターンを検出する

grepを使用して行末のパターンを検出する

私がするなら:

$ ls -R
.:
4Shared/  Cloud/

./4Shared:
UFAIZLV2R7.part3.rar

./Cloud:
UFAIZLV2R7.part2.rar.part
UFAIZLV2R7.part1.rar.part
UFAIZLV2R7.part4.rar.part

ファイルを一覧表示したい場合は、.rar次を使用します。grep.rar.part、それも私が望んでいないファイルを表示します。
私はfindまたはls **/*.rarで説明されているようにこの問題を解決しています。このスレッドうまくいきますが、これが可能かどうかを知りたいですgrep

私は以下を試しました(考えEOL):

ls -R | grep ".rar\n"

結果がない
問題は、grepingが見つかったかどうかを調べることです。行末で、しかし、よくわかりません。

ここで役に立ちますか?

答え1

アンカーポイントは$線の端に一致します。

ls -R | grep '\.rar$'

findこの目的にも使用できます。

find . -name '*.rar'

答え2

あなたの質問に加えて、.rar「.rar」だけでなく、..rar(含む)より前のすべての文字と一致することに注意してくださいrar。この場合は問題にならないかもしれませんが、正規表現.ではエスケープする必要があります。

ls -R | grep "\.rar$"

答え3

grep単語の境界から始めるように文字列検索を指示することもできます。.(a) の間にはそのような境界がある。馬ではない文字)とr(a言葉特徴)。実装に応じて、grep単語境界演算子は、または(単語の左境界のみ)または(右)にすることが\bできます。\<[[:<:]]\>[[:>:]]

$ ls -R | grep '\brar$'

はい

このサンプルデータがあるとしましょう。

$ ls -1
afile.rar
xrar
UFAIZLV2R7.part1.rar.part
UFAIZLV2R7.part2.rar.part

このコマンドは拡張子です.rar

$ ls -R | grep '\brar$'
afile.rar

どのように動作しますか?

メタ文字\bはカラットやドル記号と同様にアンカーです。 「単語の境界」という位置で一致します。この一致期間は 0 です。

これがうまくいかない状況

これらの名前のファイルが存在する場合、そのファイルもblah-rar検出されます。

$ ls -R | grep '\brar$'
afile-rar
afile.rar

英数字以外の文字は通常境界文字と見なされ、この方法ではスキップするためです。

答え4

ただし:

ls -1R -I"?" -I"??" -I"???" -I"*[!.][!r][!a][!r]"

grepまったくそうする必要はありません。

メモ:上記の方法はうまくいきますが…それでも起こります。少なくとも afile-rar理由がわからない。ここに残しますが、誇りに思っていません。とにかく他の人が言ったように:

find . '*.rar'

関連情報