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.