2009-07-13 2 views
5

이 질문은 this answer을 기반으로합니다.다른 상황에서 Grep의 옵션 -H의 실제 사용을 이해하려면

왜 두 명령에서 동일한 출력을 얻습니까?

명령

$sudo grep -H muel *               /tmp 
masi:muel 

롭의 댓글이 명령 나에게 masi: 있지만 muel을주지해야한다고 내게 제안

$sudo grep muel *                /tmp 
masi:muel 

명령 B.

간단히 말해 -H의 실제 목적은 무엇입니까?

+1

당신은 모든 * nix 명령 줄 유틸리티의 모든 옵션을 검토 할 것입니까? 그냥 궁금해 ... –

+2

"~ 할 무엇"의 수준에서 QUITE 아니에요, 더 "어떤 상황에서 사용할 수 있습니다". 의심 할 여지없이 훌륭한 질문 제목이 아닙니다. –

+1

@Bobby Jack 그러나 http://stackoverflow.com/users/54964를 참조 하시겠습니까?tab = 최근 # sort-top –

답변

12

Grep은 둘 이상의 파일 이름이 주어지면 기본적으로 파일 이름을 나열합니다. -H 옵션을 사용하면 파일 이름이 하나만 주어 지더라도이를 수행 할 수 있습니다. 두 예제 모두에서 두 개 이상의 파일 이름이 주어집니다.

여기에 더 좋은 예입니다 :

$ grep Richie notes.txt 
Richie wears glasses. 

$ grep -H Richie notes.txt 
notes.txt:Richie wears glasses. 

당신이 파일의 알 수없는 번호를 그것에게 와일드 카드를 제공하고 있으며, 와일드 카드가 하나의 파일과 일치하는 경우에도 당신은 항상 인쇄 된 파일 이름을 할 때 더 유용합니다.

$ grep muel mesi 
muel 

$ grep -H muel mesi 
masi:muel 

이 다양한 스크립팅 상황에서 중요 할 수 있습니다 : 당신은 하나의 파일을 grep을 경우

+0

@ 리치 : 바비의 대답은 훌륭합니다. 전에 옵션에 대한 실질적인 의미를 알지 못했습니다. –

5

는 -H는 차이가 있습니다. 예를 들어, 스크립트 (또는 평범하지 않은 일련의 명령)는 실제로 처리되는 파일의 수 (하나 또는 여러 개)를 인식하지 못할 수 있습니다.

+0

'-H' 옵션을 사용하는 것이 유용한 예제를 제공해 줄 수 있습니까? 나는 전에 그것을 결코 필요로하지 않았다. –

+1

파이프를 사용하면 grep이 표준 입력을 읽습니다. 즉, 파일 이름이 없음을 의미합니다. – Zr40

+1

흠 .. 내 머리 꼭대기에서 까다로워. 주어진 단어가 들어있는 파일 이름을 모아 'grep'결과를 잘라내어 여러 디렉토리를 통해 '걷는'스크립트를 상상할 수 있습니다. -H는 파일 하나만 검색 한 경우에도 파일 이름을 보장합니다. 그것은 훌륭한 예는 아니지만, 제가 예고 할 수있는 한 구체적입니다! :) –

1

여러 파일에서 grep 할 때 기본적으로 일치하는 파일의 이름이 표시됩니다. -H를 지정하면 단일 파일에서 grep을 수행하더라도 항상 파일 이름이 표시됩니다. -h를 지정하여 파일 이름을 표시하지 않을 수 있습니다.

1

이맥스는 grep 인터페이스 (M-x grep, M-x lgrep, M-x rgrep)를 가지고 있습니다. Emacs가 현재 디렉토리에서 foo를 검색하도록 요청하면 Emacs는 grep을 호출하고 grep 출력을 처리 한 다음 클릭 가능한 링크가있는 결과를 표시합니다. Google과 마찬가지로 클릭 할 수있는 링크.

grep에 -n (행 번호 표시)과 -H (파일 하나만있는 경우에도 파일 이름 표시, 일관성 유지) 두 가지 옵션을 전달한 다음 출력을 클릭 가능한 링크로 전환합니다.

일반적으로 일관성은 좋은 API가되는 데는 좋지만 일관성은 DWIM과 충돌합니다.

grep을 직접 사용하는 경우 DWIM을 사용하므로 -H를 전달하지 않습니다.

관련 문제