Если я сделаю:
$ 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 , но я не уверен.
Любая помощь здесь, пожалуйста?
grep
в этом случае? Почему нетfind
?find
команда конфликтует с Windows) и ... learning ;-). Вопрос не в «Списке файлов в директории» (это просто пользовательский пример), а в «Понимании использования команды grep»ls -1R
.grep
. Смотри мой ответ.-1R
выключателя. Видимо результаты одинаковы.Ответы:
$
Якорь соответствует концу строки.Вы также можете использовать
find
для этого:источник
В дополнение к вашему вопросу, обратите внимание, что
.rar
не только соответствует «.rar», но соответствует каждому отдельному символу (включая.
) передrar
. В этом случае, вероятно, не проблема, но.
должны быть экранированы в регулярных выражениях.источник
.asc
это как*asc
шаблон? Так будет соответствовать, напримерwhereverasc
,.xrar
.Вы также можете поручить
grep
искать строку, начинающуюся с границы слова. А.
является одной из таких границ.пример
Скажем, у меня есть этот пример данных.
Эта команда найдет только файл с
.rar
расширением.Как это работает?
Ситуации, когда это не сработает
Если у вас есть файлы с именами,
blah-rar
они также будут обнаружены.Это связано с тем, что символы, отличные от буквенно-цифровых символов, обычно считаются граничными символами, и поэтому этот подход ускользнет.
источник
"
вместо простых кавычек?.rar
. Но это не будет проблемой с использованиемls -R
. Только если вам случалось использоватьls -Ra
.-P
Переключение наgrep
в моем примере. Это вызывает PCRE интерпретацию аргумента.\n
), который является допустимым символом. Вls -1R
любом случае файлы будут отображаться в одном столбце.Просто сделать :
Вам не нужно
grep
вообще.ПРИМЕЧАНИЕ: вышесказанное работает ... за исключением того, что оно все еще получается по крайней мере,
afile-rar
и я не понимаю, почему. Я оставлю это здесь, но я не горжусь этим. В любом случае, как говорили другие:источник
xrar
илиafile-rar
.afile-rar
иxrar
до сих пор включены в вывод. Без изменений с вашими последними модами тоже. Надоедливых проблем нет? Это весело, пытаясь решить эту проблему без обычных методов 8-)-dash
проходит. То, сxrar
чем я мог справиться, но не то, что-dash.
я не понимаю,-dash.
Используйте одинарные кавычки, чтобы $ работал как конец строки. Если вы хотите использовать grep с некоторой переменной, используйте комбинацию двойных и одинарных кавычек, как показано ниже:
Мой предыдущий пост был удален, говоря, что он дубликат. Позвольте мне объяснить, как это отличается.
Другие посты упоминают либо полное использование двойных кавычек
""
, либо полное использование одинарных кавычек''
. У них обоих есть свои ограничения. Следующее объясняет это.Проблема со всеми двойными кавычками следующая:
grep "pattern$"
выдает следующую ошибку:Illegal variable name.
И использование всех одинарных кавычек работает, но если вы хотите подстановку переменных, все одинарные кавычки не будут работать. Например:
Если у меня есть строка
A_BOOK
, включая другие строки в файле FILE.Если я установил BOOK для переменной BK
Если я выполняю grep со всеми двойными кавычками, я получаю следующую ошибку::
grep "${BK}$" FILE*
1st $ для подстановки переменной, 2nd для конца шаблона ( недопустимое имя переменной ).Если я буду использовать все одинарные кавычки, подстановка переменных не произойдет.
grep '${BK}$' FILE
ничего не возвращаетЕсли я использую комбинацию двойных и одинарных кавычек, я получаю то, что ожидаю. Двойные кавычки для подстановки переменных и одинарные кавычки для конца шаблона.
источник
"foo$"
Синтаксис работает отлично на ш и семьи.Если после выполнения вышеизложенного ничего не работает, это может быть связано с окончанием строки. Чтобы исправить, сделайте:
dos2unix pr0n.txt
и сделайте своеgrep
снова.источник