다음 명령을 실행하려는 경우
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이 개별 파일을 조사하는 작업을 수행하도록하는 것입니다.