grep 출력에서 ​​매우 긴 텍스트 행을 가진 파일 제외


18

나는 종종 grep 명령을 실행하여 코드에서 물건을 찾지 만 웹 프로젝트의 문제는 종종 한 줄의 큰 텍스트를 만드는 압축 된 JavaScript 및 CSS 파일이 있기 때문에 일치하는 것이 있으면 전체 터미널 창이 1000 줄 이상을 채워서 내가 찾고있는 것을 찾는 것이 매우 비현실적입니다.

200 자 이상의 텍스트 한 줄로 된 파일을 피하는 방법이 있습니까?

답변:


20

GNU grep 및 xargs 사용시 :

grep -rLZE '.{200}' . | xargs -r0 grep pattern

또는 grep의 출력을 줄일 수 있습니다.

grep -r pattern . | cut -c1-"$COLUMNS"

또는 터미널이 텍스트를 지원하는 경우 텍스트를 줄 바꿈하지 않도록 지시하십시오.

tput rmam
grep -r pattern .

또는 사용 less -S

grep -r pattern . | less -S

3
첫 번째 예제에서 정규식을 사용하면 반전 일치로 grep에 파이프 ... | grep -v -E '.{200}'도 작동합니다. 예를 들어 200 자 이하인 ".name"이있는 현재 dir에서 * .js 파일의 모든 행을 찾으려면 다음을 수행하십시오. find . -name "*.js" -exec grep -H \\.name {} \; | grep -v -E '.{200}'
Gary S. Weaver

3

옵션 1 : 특정 패턴과 일치하는 파일을 제외 할 수 있습니다.

grep --exclude='*.min.*'

이것은 제외 script.min.js하고 style.min.css... 다른 grep옵션은 포함 --exclude-from=FILE하고--exclude-dir=DIR

옵션 2 : 이것이 실제적인지 확실하지 않지만 cut각 줄의 처음 200자를 사용할 수 grep있습니다.

grep -H [OPTIONS] PATTERN [FILE...] | cut -c1-200 | grep PATTERN

첫 번째 grep는 초기 일치를 수행하고 파일 이름과 행을 출력하고 두 번째 는 행 PATTERNcutting 한 후에도 여전히 존재 하는지 확인합니다 .


2

이런 종류의 상황에서 패턴을 이웃 컨텍스트 (30 문자)로 grep하는 것이 좋습니다.

grep -Po '.{0,30}pattern.{0,30}' *.js
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.