Linux에서 grep을 사용하여 CRLF (Dos Line Ending)가 포함 된 파일을 어떻게 검색합니까?
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
나처럼 미니멀리스트 유닉스에 파일 명령 과 같은 멋진 기능이 포함되어 있지 않고 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 또는 사용중인 파일 덤프 유틸리티로 변경하십시오.
- confirm that the cut command includes both a leading and trailing space as well as just the hexadecimal character output from the dump utility
- limit the dump output to the first 1000 characters or so for efficiency
For example, something like this may work for you using od instead of dump:
od -t x2 -N 1000 $file | cut -c8- | egrep -m1 -q ' 0d| 0d|0d$'
'Programing' 카테고리의 다른 글
Thymeleaf에서 if-else를 수행하는 방법? (0) | 2020.07.22 |
---|---|
새 LibGDX 프로젝트를 실행할 때“파일을 찾을 수 없습니다” (0) | 2020.07.22 |
camelCaseText를 문장 케이스 텍스트로 변환 (0) | 2020.07.22 |
Windows 명령 줄에서 폴더 크기 가져 오기 (0) | 2020.07.22 |
iPhone에서 컬러 1x1 UIImage를 동적으로 만드는 방법은 무엇입니까? (0) | 2020.07.22 |