grep을 사용하여 줄 끝에서 패턴 감지 하면 .rar.part파일 도 표시됩니다 . 원하는 것이

만약 내가한다면:

$ 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파일 도 표시됩니다 . 원하는 것이 아닙니다. 이 스레드 에서 또는
사용 하여이 문제를 해결 하고 정상적으로 작동하지만을 통해 가능한지 배우고 싶습니다 . findls **/*.rargrep

나는 (에 대해 생각 EOL) 시도했다 .

ls -R | grep ".rar\n"

결과가 없습니다.
문제는 줄 끝에서 greping이 발견되는지 발견하는 데 있다고 생각 하지만 확실하지 않습니다.

도와주세요?



답변

$앵커는 라인의 끝을 일치합니다.

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는 캐럿 및 달러 기호와 같은 앵커입니다. “단어 경계”라는 위치에서 일치합니다. 이 일치는 길이가 0입니다.

이것이 작동하지 않는 상황

이름 blah-rar이 지정된 파일이 있으면이 파일도 감지됩니다.

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

영숫자 이외의 문자는 일반적으로 경계 문자로 간주되므로이 방법을 넘어 서기 때문입니다.


답변

그냥 해 :

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

당신은 전혀 필요하지 않습니다 grep.

참고 : 위의 내용은 … 적어도 여전히afile-rar이해하고 이유를 이해하지 못한다는 점을 제외하고는 작동합니다. 나는 그것을 여기에 남겨 둘 것이다. 그러나 나는 그것을 자랑스럽게 생각하지 않는다. 어쨌든 다른 사람들이 말했듯이 :

find . '*.rar'


답변

작은 따옴표를 사용하여 $를 줄 끝으로 사용하십시오. 일부 변수로 grep하려면 다음과 같이 큰 따옴표와 작은 따옴표를 조합하십시오.

grep "$var"'$'

이전 게시물이 중복되어 삭제되었습니다. 이것이 어떻게 다른지 설명하겠습니다.

다른 게시물에는 큰 따옴표의 ""전체 사용 또는 작은 따옴표의 전체 사용이 언급되어 있습니다 ''. 둘 다 자신의 한계가 있습니다. 다음은 그것을 설명합니다.

모든 큰 따옴표와 관련된 문제는 다음과 같습니다.
grep "pattern$"다음 오류가 발생합니다.Illegal variable name.

모든 작은 따옴표를 사용하면 작동하지만 변수 대체를 원하면 모든 작은 따옴표가 작동 하지 않습니다 . 예를 들면 다음과 같습니다.

나는 문자열이 있으면 A_BOOK파일 파일에 다른 문자열을 포함하여.

$ cat FILE
A_BOOK
B_BOOK_NOT_LAST
C_BOOK

BOOK을 변수 BK로 설정하면

set BK = BOOK

나는 모든 따옴표와 grep을 경우에, 나는 다음과 같은 오류가 발생합니다 : grep "${BK}$" FILE*: 변수 치환, 패턴의 끝을위한 2 차 (에 대한 1 차 $ 불법 변수 이름 ).

모든 작은 따옴표로 grep하면 변수 대체가 발생하지 않습니다.
grep '${BK}$' FILE아무것도 반환하지 않습니다

큰 따옴표와 작은 따옴표의 조합을 사용하면 기대하는 것을 얻습니다. 변수 대체를위한 큰 따옴표 및 패턴 끝을위한 작은 따옴표.

$ grep "${BK}"'$'  # << gives expected output
A_BOOK
C_BOOK


답변

위의 사항을 따른 후에도 아무런 효과가 없으면 줄 끝으로 인한 것일 수 있습니다. 수정하려면 다음 dos2unix pr0n.txt을 수행 grep하십시오.


답변