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'

관련 정보