Linux에서 grep으로 dos 줄 끝이 포함 된 파일을 검색하고 싶습니다. 이 같은:
grep -IUr --color '\r\n' .
위의 내용은 리터럴 rn
와 일치하는 것 같습니다.
이것의 출력은 xargs를 통해 todos로 파이프되어 crlf를 lf로 변환합니다.
grep -IUrl --color '^M' . | xargs -ifile fromdos 'file'
용도 Ctrl+V, Ctrl+M grep 문자열에 리터럴 캐리지 리턴 문자를 입력합니다. 그래서:
grep -IUr --color "^M"
작동합니다-^M
내가 제안한대로 입력 한 리터럴 CR이 있습니다.
파일 목록을 원하면 -l
옵션도 있습니다.
설명
-I
이진 파일 무시-U
grep이 CR 문자를 제거하지 못하게합니다. 기본적으로 텍스트 파일이라고 결정하면 수행됩니다.-r
각 디렉토리 아래의 모든 파일을 재귀 적으로 읽습니다.grep은 아마도 당신이 원하는 도구가 아닐 것입니다. 모든 파일에서 일치하는 모든 줄에 대한 줄을 인쇄합니다. 예를 들어, 10 줄 파일에서 todos를 10 번 실행하지 않는 한 grep이 가장 좋은 방법은 아닙니다. find를 사용하여 트리의 모든 파일에서 파일을 실행 한 다음 "CRLF"에 대해 파일을 가져 오면 스타일 줄 끝이있는 각 파일에 대해 한 줄의 출력이 표시됩니다.
find . -not -type d -exec file "{}" ";" | grep CRLF
당신에게 다음과 같은 것을 얻을 것입니다 :
./1/dos1.txt: ASCII text, with CRLF line terminators
./2/dos2.txt: ASCII text, with CRLF line terminators
./dos.txt: ASCII text, with CRLF line terminators
grep -IUlr $'\r'
Grep 버전이 -P (--Perl-regexp) 옵션을 지원하는 경우
grep -lUP '\r$'
사용 될수있다.
# list files containing dos line endings (CRLF)
cr="$(printf "\r")" # alternative to ctrl-V ctrl-M
grep -Ilsr "${cr}$" .
grep -Ilsr $'\r$' . # yet another & even shorter alternative
검색어가 검색되었습니다 ... 비슷한 문제가 있습니다 ... 누군가 버전 컨트롤에 혼합 줄 끝을 제출 했으므로 이제 0x0d
0x0d
0x0a
줄 끝. 참고
grep -P '\x0d\x0a'
모든 줄을 찾는 반면
grep -P '\x0d\x0d\x0a'
과
grep -P '\x0d\x0d'
줄 끝 패턴을 찾을 때 grep 내부에 뭔가 "else"가있을 수 있습니다. 불행히도 저에게는 그렇지 않습니다!
유닉스에서 파일 명령을 사용할 수 있습니다. 줄 종결 자와 함께 파일의 문자 인코딩을 제공합니다.
$ file myfile
myfile: ISO-8859 text, with CRLF line terminators
$ file myfile | grep -ow CRLF
CRLF
나와 같이 미니멀리스트 유닉스에 file 명령과 같은 멋진 기능이 포함되어 있지 않고 grep 식의 백 슬래시가 협력하지 않으면 다음을 시도하십시오.
$ for file in `find . -type f` ; do
> dump $file | cut -c9-50 | egrep -m1 -q ' 0d| 0d'
> if [ $? -eq 0 ] ; then echo $file ; fi
> done
위의 내용을 수정하려는 경우 :
예를 들어, dump 대신 od를 사용하면 다음과 같이 작동합니다.
od -t x2 -N 1000 $file | cut -c8- | egrep -m1 -q ' 0d| 0d|0d$'