grep 명령을 사용하여 이를 어떻게 달성할 수 있습니까? [폐쇄]

grep 명령을 사용하여 이를 어떻게 달성할 수 있습니까? [폐쇄]

내 폴더에 여러 파일이 있고 file_1, file_2, ..일부에는 패턴이 포함되어 있습니다 pattern_abc.

해당 패턴을 가진 모든 파일의 행을 포함하는 new_file을 어떻게 만들 수 있습니까 pattern_abc?

답변1

pattern_abc그 안에 있는 모든 파일에서 일치하는 행만 선택하려면 dir다음을 사용하십시오.

$ grep -h 'pattern_abc' dir/* > new_file

-h플래그를 사용하면 grep파일 이름이 일치하는 줄과 함께 출력되지 않습니다.

답변2

재귀 grep을 시도해 볼 수 있습니다.

grep -r pattern directory > new_file
  • -r각 디렉터리의 모든 파일을 재귀적으로 읽습니다.

답변3

GNU 사용 grep:

grep -lZ pattern_abc folder/file_* | xargs -r0 cat > new_file

(를 사용하는 경우에는 고려사항만 고려 하여 zsh대체할 수 있습니다.file_*file_*(.)정기적인파일 또는 file_*(.n)파일 목록 정렬수치적으로(그래서 file_9온다앞으로 file_10예를 들어).

아니면 재귀적으로만 고려하세요.정기적인문서:

find folder -name 'file_*' -type f -exec grep -lZ pattern_abc {} +|
  xargs -r0 cat > new_file

그러나 파일 목록은 정렬되지 않으므로 파일이 임의의 순서로 연결됩니다.

발견된 각 폴더 내에서 zsh파일을 숫자순으로 정렬합니다 .

grep -lZ pattern_abc folder/**/file_*(Dn.) | xargs -r0 cat > new_file

( D그러한 숨겨진 디렉토리도 볼 수 있습니다 find).

답변4

그러면 일치하는 줄이 포함된 파일을 찾아 pattern_abc해당 내용 전체(일치하는 줄뿐만 아니라)를 출력합니다.

grep -q, 첫 번째 일치 패턴이 발견되면 중지하고 find다음 파일을 처리합니다.

find . -type f -execdir grep -q 'pattern_abc' {} \; -exec cat {} >> /path/to/outfile \;

관련 정보