![grep 명령을 사용하여 이를 어떻게 달성할 수 있습니까? [폐쇄]](https://linux55.com/image/143591/grep%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%9D%B4%EB%A5%BC%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EB%8B%AC%EC%84%B1%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
내 폴더에 여러 파일이 있고 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 \;