메뉴 건너뛰기

Hodol's Blog

Linux에서 파일 내의 문자열을 검색하는 방법

목차
들어가기 전에..
find 명령은 파일을 찾는 명령이다. 사용법은 find [검색할 디렉토리] [옵션]이다. 다음 명령은 현재 디렉토리에서 test.txt라는 이름을 가진 파일을 검색하고 해당 파일이 존재한다면 경로를 출력한다.
$ find ./ -name test.txt
xargs 명령은 표준 입력의 데이터를 가공하여 명령어를 만들고 실행한다. 보통 파이프와 함께 사용한다.
$ ls file_*
file_1.txt file_2.bak file_3.avi
$ ls file_* | xargs rm
위 명령은 따져보면 ls 명령으로 file_로 시작하는 파일들을 검색하여 표준 출력으로 출력되고 이는, 파이프(|)에 의해, xargs표준 입력으로 넘어 간다. 그럼 xargsls의 실행 결과의 각 항목마다 rm 다시 명령을 실행한다. 따라서 최종적으로 rm file_1.txt, rm file_2.bak, rm file_3.avi들이 실행된다.
$ ls file* | xargs -t -i cp {} {}.bak
위 명령에서 {}find 명령의 -exec에서와 같이 파이프 앞의 명령의 결과의 각 항목을 의미한다. 따라서 위 명령은 이름이 file로 시작하는 파일을 이름 뒤에 .bak 붙여 복사한다.
grep 명령은 파일 내에서 지정한 패턴이나 문자열을 찾은 후에, 그 패턴을 포함하고 있는 모든 행을 표준 출력해 준다. 기본 문법은 grep [-옵션] 패턴 파일명 이다. grep의 option은 아래와 같다.
-c 패턴이 일치하는 행의 수를 출력
-i 비교시 대소문자를 구별 안함
-v 지정한 패턴과 일치하지 않는 행만 출력
-n 행의 번호를 함께 출력
-l 패턴이 포함된 파일의 이름을 출력
-w 패턴이 전체 단어와 일치하는 행만 출력
find와 xargs를 이용하여 찾는 법
$ find . | xargs grep String
현재 디렉토리 내 모든 파일들을 중에서 "String"이라는 문자열을 갖고 있는 파일의 한 줄과 이름을 보여준다.
grep을 이용하여 찾는 법
문자열은 아래와 같이 찾으면 된다.
$ grep -n 'String' *.txt
확장자가 txt인 파일 내에서 'String' 이라는 패턴이 들어간 문자열과 행번호를 출력
$ grep '^http://.*\.hodol\.kr/.*' *.htm
확장자가 htm인 파일 내에서 정규식에 맞는 문자열을 찾아서 파일명과 문자열을 출력한다.