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


18

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

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

답변:


10
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)

12
마지막에 pkill 명령이 있습니다
— diega

1
최신 버전의 GNU grep에서는 grep -r일반적으로 grep -R전자가 심볼릭 링크를 통과하지 않기 때문에 선호 됩니다.
— Stéphane Chazelas

19

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


5
ack 언급에 +1 페이지 매김 결과에 대한 강조 표시를 유지하려면 --pager = "less -R"옵션을 반드시 포함하십시오. 우분투에서는 "ack"을 가져 오기 때문에 "ack-grep"이라고합니다.
— Shawn Chin

나는 ack도 사용하지만 언젠가는 사용할 수 없다 ..
— elmarco

2
ACK 그냥 펄 스크립트이기 때문에, 당신은 할 수 있습니다 높은 바없는 당신은 펄 설치 한 그것을 사용할 수 어디를합니다.
— Kai

Ack은 기본적으로 사용하기에 좋지만, ack를 설치하는 데 걸리는 시간에 grep에 대한 일부 기본값을 구성 할 수 있습니다.이 페이지의 다른 곳에서 내 대답을 참조하십시오. 나는 1980 년대에 이것을 한 번 해왔고, 그 이후로 grep은 ack이하는 모든 일을 해냈습니다. (단 GREP 반대 ACK의 큰 소리로 주장에도 불구하고, 실제로는 더 빠르다)
— 조나단 하틀리

7

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

    export GREP_OPTIONS="--color=auto"

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


GREP_OPTIONS유해한 것으로 간주되어야합니다. alias대신 사용 하는 것이 좋습니다 . 여기를보십시오 : bugs.launchpad.net/ubuntu/+bug/67141
— lesmana

GREP_OPTIONS가 특정 스크립트에서 문제가 될 수 있음에 동의합니다. 그러나 버그 67141 에서 주장했듯이 GREP_OPTIONS를 사용하면 다양한 형태의 grep (grep, egrep, fgrep, rgrep, zgrep, bzgrep, bzfgrep, bzegrep 등)에 대해 하나의 옵션을 설정할 수 있지만 별칭은 다음과 같이 설정해야합니다. 모든 형태의 * grep과 많은 종류의 grep이 있습니다.
— Stefan Lasiewski

GREP_OPTIONS를 몇 년 (수십 년) 동안 사용했지만 그로 인한 피해는 매우 현실적입니다. 이 env var 세트로 grep을 호출하는 모든 도구는 수정 된 기본 동작을 상속하므로 도구가 손상됩니다. 대신 별명 또는 실행 가능 랩퍼 스크립트를 정의하여이 문제점을 완전히 피하십시오.
— Jonathan Hartley

스크립트 는 환경을 소독해야합니다. ifs, buts 또는 buts는 허용되지 않습니다. 기간. (예, 허리에 왕의 고통이 있습니다 ...).
— vonbrand

3

환경 변수 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을 전달하여 정상적으로 검색하고 원하는 다른 명령 줄 플래그를 재정의 할 수 있습니다. .


2

이 --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

1
GREP_COLOR더 이상 사용되지 않습니다. GREP_COLORS대신 사용하십시오 .
— g33kz0r

2

실제로 색상을 설정하는 예는 보이지 않았으므로 다음은 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을 사용하는 스크립트가 엉망이됩니다.

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