만약 내가한다면:
$ 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이 발견되는지 발견하는 데 있다고 생각 하지만 확실하지 않습니다.
도와주세요?
답변
$
앵커는 라인의 끝을 일치합니다.
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
하십시오.