고양이 * | grep 무언가… 결과는 무엇입니까? DATABASE 쉘은 단어가 들어있는 * 파일의 모든 줄을

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

cat * | grep DATABASE

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

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

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


답변

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

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

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

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


답변

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

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


답변