일부 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을 사용하는 스크립트가 엉망이됩니다.