Programing

Linux에서 grep을 사용하여 CRLF (Dos Line Ending)가 포함 된 파일을 어떻게 검색합니까?

lottogame 2020. 7. 22. 21:48
반응형

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 이진 파일 무시
  • -Ugrep이 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'

describeshell.com-grep -IUlr


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$'

참고URL : https://stackoverflow.com/questions/73833/how-do-you-search-for-files-containing-dos-line-endings-crlf-with-grep-on-linu

반응형