고양이 * | grep 무언가… 결과는 무엇입니까?


8

다음 명령을 실행하려는 경우

cat * | grep DATABASE

쉘은 단어가 들어있는 * 파일의 모든 줄을 뱉어냅니다 DATABASE. 각 줄이 분리 된 파일을 추출 할 수있는 방법이 있습니까?

내가 사용하려고 -H에 따른 그렙에 대한 옵션을 man말한다을 print the filename for each match하지만 내 쉘에서 그냥 말한다

(standard input):$DATABASE_FUNCTION = dothis();

좋은 질문. 나는 아직도 고양이-> grep 습관을 깰려고 노력하고 있습니다. :)
Sirex 2016 년

답변:


22

고양이를 사용하지 마십시오. 대신 grep DATABASE *또는 grep -n DATABASE *(파일 이름뿐만 아니라 줄 번호를 알고 싶다면) 직접 사용하십시오.

쓸모없는 고양이 사용을 참조하십시오 .

좀 더 명확히하기 위해 : cat *실제로 모든 파일을 파이프를 통해 grep에 공급할 때 모든 파일을 연결하므로 grep은 어떤 내용이 어떤 파일에 속하는지 알 수 없으며 실제로 파일을 스캔하고 있는지 또는 실제로 파일을 스캔하는지 알 수 없습니다 아주 빨리 타이핑하는 것입니다. 파이프를 사용하면 모두 하나의 큰 표준 입력 스트림입니다.

마지막 -H으로 grep은 검색 할 파일이 두 개 이상인 경우 기본적으로 파일 이름을 인쇄하므로 거의 중복되지 않습니다. *glob가 단일 파일로 확장되고 grep이 파일 이름을 생략 할 가능성이 있기 때문에 출력을 구문 분석하려는 경우에 유용 할 수 있습니다 .


6

사용하십시오 grep -H DATABASE *(참고 : 디렉토리에 파일이 둘 이상인 경우 -H는 선택 사항입니다).

당신이 겪고있는 문제는 명령을 사용하여 cat *모든 파일을 하나의 큰 엉망으로 묶은 다음 |표준 입력으로 보냅니다 grep DATABASE. grep이 데이터를 볼 때까지 데이터의 출처에 대한 정보가 손실되었습니다. 해결 방법은 grep이 개별 파일을 조사하는 작업을 수행하도록하는 것입니다.

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