Обнаружение шаблона в конце строки с помощью 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 найден в конце строки , но я не уверен.

Любая помощь здесь, пожалуйста?

  • Греп против внимания на mac
  • подсчет вхождений строки
  • Найти и удалить много файлов по определенному контенту
  • Использование \ $ в конце имени переменной передается grep
  • Как я могу выполнить двоичный поиск текстового файла для определенной строки символов?
  • ls | Работа grep не работает с ls --color
  • Улучшить время выполнения для рекурсивной проверки md5sum?
  • Как мне grep и сортировать с помощью этого конкретного шаблона?
  • 4 Solutions collect form web for “Обнаружение шаблона в конце строки с помощью grep”

    $ Anchor соответствует концу строки.

     ls -R | grep '\.rar$' 

    Вы также можете использовать find для этого:

     find . -name '*.rar' 

    В дополнение к вашему вопросу учтите, что .rar не только соответствует «.rar», но соответствует каждому отдельному символу (в том числе . ) Перед rar . В этом случае, вероятно, не проблема, но . должен быть экранирован в регулярных выражениях.

     ls -R | grep "\.rar$" 

    Вы также можете grep искать строку, начинающуюся с границы слова. A. является одной из таких границ.

     $ 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 является якорем, похожим на символ каретки и доллара. Он соответствует позиции, которая называется «границей слов». Это совпадение равно нулю.

    Ситуации, когда это не сработает

    Если у вас есть файлы с именем blah-rar они также будут обнаружены.

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

    Это потому, что персонажи, отличные от буквенно-цифровых символов, обычно считаются граничными символами, и поэтому проскальзывают мимо этого подхода.

    Просто делать :

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

    Вам вообще не нужен grep .

    ПРИМЕЧАНИЕ . Вышеупомянутое работает … кроме того, что он по-прежнему получает как минимум afile-rar и я не понимаю, почему. Я оставлю его здесь, но я не горжусь этим. В любом случае, как говорили другие:

     find . '*.rar' 
    Linux и Unix - лучшая ОС в мире.