[unix] GNU grep을 사용하여 일치 항목을 강조 표시하려면 어떻게해야합니까?

일부 Linux grep에서 일치를 강조 표시하고 일치하는 파일을 인쇄하도록 구성된 Linux를 보았습니다 .

grep일치 항목을 강조 표시 하도록 구성 하려면 어떻게 해야합니까?



답변

alias cgrep='grep -nR --color'

용법:

$ cgrep somestring /path/to/dir/or/file/with*/possible/*wild.card

또한 내가 좋아하는 것 중 하나 :

$ pgrep some-hanging-process

다음 상황에서 사용할 수있는 일부 변경 프로세스의 이름과 일치하는 모든 프로세스의 pid를 나열합니다.

$ kill $(pgrep some-hanging-process)


답변

grep을 포주하는 가장 좋은 방법은 ack 을 사용하는 것입니다. ack 은 지능적인 무시 목록이있는 재귀 grep입니다 (예 : .svn 디렉토리를 검색하지 않고 백업 파일을 무시합니다), 결과의 색상 강조 표시 및 펄 정규식. grep이 98.6 %의 시간을 할애하고 싶습니다.


답변

별명을 사용하여 grep을 재정의하는 대신 .bashrc에서 이것을 설정했습니다.

    export GREP_OPTIONS="--color=auto"

나에게 이것은 Linux, MacOSX 및 FreeBSD에서 작동합니다.


답변

환경 변수 GREP_OPTIONS를 피하는 것이 좋습니다. 이는 grep의 모든 호출에 영향을 미치며 다른 도구에 포함 된 경우에도 영향을 미칩니다. 이러한 도구가 grep이 한 방향으로 작동 할 것으로 예상하고 해당 동작을 변경하면 해당 도구가 손상됩니다.

대신 별명을 작성하면 잘 작동합니다. 이는 대화식 쉘에서 grep 호출에만 영향을 미칩니다 (예 : 직접 입력).

내가 가장 좋아하는 마지막 옵션은 grep을 호출하는 래퍼 스크립트를 만드는 것입니다. 다른 프로그램 에서이 래퍼를 호출 할 수 있기 때문에 별칭보다 선호합니다. 예를 들어 vimgrep을 설정하여 vim에서 vim 내에서 검색 한 내용이 명령 줄 검색과 ​​동일하게 작동합니다.

$ cat `which grp`
#!/usr/bin/env bash
grep -rI --color --exclude-dir=\.bzr --exclude-dir=\.git --exclude-dir=\.hg --exclude-dir=\.svn --exclude-dir=build --exclude-dir=dist --exclude=tags $*

다음을 사용하여 이것을 호출하십시오.

$ grp pattern dir

예 :

$ grp pattern .

현재 디렉토리와 하위 디렉토리의 모든 텍스트 파일에서 ‘pattern’인스턴스를 검색합니다.

‘grep’을 가리지 않고 스크립트 ‘grp’를 호출하므로 사용자 정의 된 기본값으로 grep을 호출하는지 여부를 항상 알 수 있습니다.

기본적으로 나는 포함한다 :

-r : search subdirs recursive
-I : skip binary files
--color : highlight matches in color
--exclude-dir : skip specified directories and their subdirs
--exclude : skip specified files

모든 사람들이 소스 제어 디렉토리를 건너 뛰고 싶다고 생각합니다. .hg .git .bzr .svn

‘build’와 ‘dist’를 건너 뛰는 것은 파이썬주의이며, 아마도 대부분의 사람들에게 적용되지 않을 것입니다. 의심 할 바없이 일하면서 자신 만의 특질을 개발할 것입니다.

‘tags’는 ctags의 출력이며 vim과 같은 도구에서 ‘function definition로 이동’등에 사용됩니다. 따라서 내 소스 코드의 모든 단어와 기호 사본이 하나 이상 포함되어 있으므로 검색 결과에서 건너 뛸 가치가 있습니다.

끝에있는 “$ *”는 “및 명령 줄의 다른 모든 매개 변수”에 대한 bash 구문이므로 패턴과 dir을 전달하여 정상적으로 검색하고 원하는 다른 명령 줄 플래그를 재정의 할 수 있습니다. .


답변

--color옵션은 이미 여러 번 언급되었지만 환경 변수를 사용하여 일치 항목이 강조 표시되는 색상을 구성 할 수 있음을 추가하고 싶습니다

export GREP_COLOR="1;33"

색상은 참조 용 ANSI 색상 코드를 사용하여 인코딩해야합니다.

Black       0;30     Dark Gray     1;30
Blue        0;34     Light Blue    1;34
Green       0;32     Light Green   1;32
Cyan        0;36     Light Cyan    1;36
Red         0;31     Light Red     1;31
Purple      0;35     Light Purple  1;35
Brown       0;33     Yellow        1;33
Light Gray  0;37     White         1;37


답변

실제로 색상을 설정하는 예는 보이지 않았으므로 다음은 GNU grep에 대한 간단한 설정입니다.

# turn on colors, natch.
export GREP_OPTIONS="--color=auto"

if [[ $(echotc Co) -ge 256 ]]; then
  # 256 color terminals
  export GREP_COLORS="mt=38;5;118:sl=:cx=:fn=38;5;18:ln=1;30:bn=37:se=30"
else
  # everybody else
  export GREP_COLORS="mt=31:sl=:cx=:fn=34:ln=1;30:bn=30:se=30"
fi

주의하십시오 GREP_OPTIONS; 다른 용도로 사용하지 마십시오. 그렇지 않으면 --color=auto시스템에서 grep을 사용하는 스크립트가 엉망이됩니다.


답변