호환성 테스트:

호환성 테스트:

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" {} \;

관련 정보