5000개 파일의 첫 번째 열에 특정 문자열이 있는 행을 가져오고 싶습니다.
파일 1
agd fkg fls ofk
ggs kkg ikg gkl
bsg ksf olg lzj
many more lines,,,
kgf kkg ikg lgk
파일 2
gik zlg olg pzk
ppl sjg gol dzj
zjg iwj bmh hgi
many more lines,,,
kgf wlg ugk lkf
더 많은 파일이 있습니다..
결과물 파일
kgf kkg ikg lgk
kgf wlg ugk lkf
more lines...
이 경우 "kgf"와 같이 첫 번째 열이 특정 문자열인 각 파일에서 행을 가져오고 싶습니다.
하나의 파일에서 데이터를 가져오는 방법은 알고 있지만 여러 파일에서 데이터를 가져오는 방법은 알 수 없습니다. 누군가 나에게 가르쳐 줄 수 있습니까?
답변1
간단히:
grep -rEh '^kgf\b' .
재귀적입니다.
-r, --recursive 명령줄에 있는 경우에만 기호 링크를 따라 각 디렉터리 아래의 모든 파일을 반복적으로 읽습니다. 파일 피연산자가 제공되지 않으면 grep은 작업 디렉토리를 검색합니다. 이는 -d recurse 옵션과 동일합니다.
또는 현재 디렉터리에서 와일드카드를 사용합니다.
grep -Eh '^kgf\b' *
호환성 테스트:
- GNU와 잘 작동합니다(놀랍지 않습니다).
grep (GNU grep) 3.3
- FreeBSD 12.1과 잘 작동합니다.
grep (GNU grep) 2.5.1-FreeBSD
- Minix3 에는 ( 확장된 정규식 및 재귀 도 포함 ) 스위치가
grep version 0.9
있지만 인식하지 못합니다.-h
-E
-R
단어 경계\b
하지만-w
그래서
grep -wh '^kgf' *
또는
grep -h '^kgf ' *
답변2
모든 파일을 캡처하고 파이프할 수 있습니다.grep
cat file1 file2 file3 | grep "^kgf"
또는 디렉토리의 모든 파일을 검색하려면 다음과 같이 말할 수 있습니다.
cat * | grep "^kgf"
해당 디렉토리와 그 아래 디렉토리의 어느 곳에서나 보려면 다음을 사용할 수 있습니다.
find dirname -type f -exec grep "^kgf" {} \;