grep에서 less까지 파이프를 사용할 때 색상 결과 가져 오기


223

grep의 --colour 옵션을 많이 사용하지만 자주 사용하는 횟수도 적습니다. grep 결과를 더 적은 파이프로 어떻게 채울 수 있습니까? (또는 가능합니까?)

grep "search-string" -R * --colour | less 

편집하다 :

나는 직접 솔루션이나 이와 동등한 것을 찾고있다.


답변:


250

당신이 단순히 달릴 때 grep --color 의미한다 grep --color=auto 출력이 터미널인지 아닌지를 검출하고, 그렇다면 컬러를 인 에이블한다. 그러나 파이프를 감지하면 색칠이되지 않습니다. 다음 명령 :

grep --color=always -R "search string" * | less

항상 채색을 활성화하고 자동 감지를 무시하므로 색상 강조 표시가 나타납니다. less.

편집하다: 다만 less 저를 위해 작동합니다. 아마도 이전 버전에서는 -R 거기에서 제안 된대로, 색을 다루는 플래그.


125
너는 다음을 사용해야한다. less -R 색상 인코딩이 덜 정확하게 해석되도록하기
therefromhere

1
그것은 단지 나를 위해 일했습니다. less버전에 따라 다를 수 있습니다.
drrlvn

1
(유용하게도) 유용한 부록 : 일부 경기를 제외하고 채색을 유지해야하므로 실제로 grep pattern file | grep -v badpattern | grep --colour=always pattern | less -R, 그것은 나의 필요를 완벽하게 만났다. (다시 한번 감사드립니다!)
Owen Blacker

7
나는 그들이 색상 처리 기능을 구현 한 것만 믿을 수 없다. less 그러므로 특별한 기회를 놓친 것입니다. colorless 수단. 혼자의 이름을 위해 그것은하게되었을 것임에 틀림 없었다! 바이너리가 다음과 같이 실행될 때 자동으로 -R을 호출하는 패치를 작성해야합니다. colorless.
Christian

1
@OwenBlacker 별칭이 아닐 수도 있습니다. 너는 가질지도 모른다. $LESS 세트 -R.
greyfade

27

이것을 당신의 집에 넣을 수 있습니다. .bashrc 파일:

export GREP_OPTIONS="--color=always"

또는 다음과 같은 별칭을 만듭니다.

alias grepc="grep --color=always"

그리고 당신은 -R 옵션 less, 그곳에서 지적한 바와 같이


26
경고 !: GREP_OPTIONS = "- color = always"가 깨질 수 있습니다. 많은 grep (또는 (e | f) grep)을 사용하는 스크립트.
mctylr

4
네, grep 별칭을 사용하는 것이 좋습니다. 당신은 언제나 순수하게 얻을 수 있습니다. grepGREP, 또는 --color 옵션을 수동으로.
asmeurer

이것은 나를 위해 작동하지 않습니다, 별칭이 작동합니다.
saeedgnu

5

이런 경우에, 나는 실제로 작은 sh 파일을 생성하고 그것들을 넣는 것을 선호한다. /usr/local/bin.
나는 보통 사용한다. grep 재귀 적으로 pwd, 그래서 내 개인 스크립트 thats :

#!/bin/sh
grep --color=always -r "$@" . | less -R

그리고 나서 방금 복사했습니다. /usr/local/bin/g (예, 많이 사용합니다)


1
왜 이런 종류의 쉘 함수를 사용하지 않는가? g() { grep --color=always -r "$@" . | less -R } 동일하게 작동하며 더 나은 성능을 (미세하게) 제공합니다.
00dani

@ 00dani 그래, 그건 유효한 대안이고 때로는 그것을 사용합니다. 이 경우, 대부분의 시간은 IO에서 소비되므로 인식 할 수있는 성능 향상은 없습니다. 또 다른 차이점은 한 번 PATH에서이 스크립트가 다른 쉘 스크립트 및 별명에도 사용될 수 있다는 것입니다. 함수는 대신 명시 적으로로드해야합니다.
Iazel

1

"grep"의 별명을 지정하지 마십시오. 쉘에서 사용하지 않는 "less"의 별명을 지정하는 것이 좋습니다. 당신의 .bashrc 그냥 넣어 : alias less="less -r".


3
별로 옳지 않습니다. 하나는 사용할 필요가있다. 양자 모두 grep --color=alwaysless -R. grep은 다른 프로세스로 파이프되는 것을 알고 있습니다. --color=auto 옵션은이 정보를 사용하여 색상을 출력할지 여부를 결정합니다.
brandizzi

3
유의 사항 less 선택권 -r 다른 것보다 -R. 아마 -R 더 안전합니다.
Craig McQueen

1
그렇다면 왜 내 솔루션에 투표하십시오. OP는 특별히 요구합니다. less 예제에서는 이미`--color '옵션을 사용하고있다.
not2qubit

3
별칭은 아마도 여기에 바람직하지 않을 수 있습니다. less ~을 지원하다 $LESS 환경 변수. 따라서 별칭 대신에, export LESS='-R' 바람직 할 수 있습니다.
greyfade

0

나는 달릴 필요가있어.

grep --color=always -R "search string" * | less - r

와 더불어 -아르 자형 후 깃발 적게 이 순서로 실행합니다.

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