Поиск файлов в Linux и Unix — find, grep, ack, ripgrep
차례:
- Grep 명령 구문
grep
을 사용하여 파일에서 문자열을 검색하는 방법- 일치 반전 (제외)
- Grep을 사용하여 명령 출력에서 문자열을 검색하는 방법
- 재귀 검색
- 파일 이름 만 표시
- 대소 문자를 구분하지 않는 검색
- 전체 단어 검색
- 줄 번호 표시
- 개수 일치
- 여러 문자열 검색 (패턴)
- 저소음 모드
- 기본 정규식
- 확장 정규 표현식
- 경기 전 라인 인쇄
- 경기 후 라인 인쇄
- 결론
"전역 정규식 인쇄"를 나타내는
grep
명령은 Linux에서 가장 강력하고 일반적으로 사용되는 명령 중 하나입니다.
Grep은 주어진 패턴과 일치하는 행을 하나 이상의 입력 파일에서 검색하고 각 일치하는 행을 표준 출력에 씁니다. 파일을 지정하지 않으면
grep
은 표준 입력에서 읽습니다. 일반적으로 다른 명령의 출력입니다.
이 튜토리얼에서는 실제 예제를 통해
grep
명령을 사용하는 방법과 가장 일반적인 GNU
grep
옵션에 대한 자세한 설명을 보여줍니다.
Grep 명령 구문
grep
명령을 사용하는 방법을 시작하기 전에 기본 구문을 검토하십시오.
grep
유틸리티 표현식은 다음 형식을 따릅니다.
grep PATTERN
대괄호 안의 항목은 선택 사항입니다.
-
OPTIONS
-0 개 이상의 옵션. Grep은 동작을 제어하는 많은 옵션을 제공합니다.PATTERN
-검색 패턴.FILE
-0 개 이상의 입력 파일 이름.
파일을 검색하려면 명령을 실행하는 사용자에게 파일에 대한 읽기 권한이 있어야합니다.
grep
을 사용하여 파일에서 문자열을 검색하는 방법
grep
명령의 가장 기본적인 사용법은 파일에서 문자열 (텍스트)을 검색하는 것입니다.
예를 들어, 문자열
bash
를 포함하는
/etc/passwd
파일의 행을 표시하려면 다음 명령을 사용할 수 있습니다.
grep bash /etc/passwd
출력은 다음과 같아야합니다.
root:x:0:0:root:/root:/bin/bash linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
문자열에 공백이 있으면 작은 따옴표 나 큰 따옴표로 묶어야합니다.
grep "Gnome Display Manager" /etc/passwd
일치 반전 (제외)
패턴과 일치하지 않는 행을 표시하려면
-v
(또는
--invert-match
) 옵션을 사용하십시오.
예를 들어, 문자열
nologin
을 포함하지 않는
/etc/passwd
파일의 행을 표시하려면 다음 명령을 사용할 수 있습니다.
grep -v nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash colord:x:124:124::/var/lib/colord:/bin/false git:x:994:994:git daemon user:/:/usr/bin/git-shell linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Grep을 사용하여 명령 출력에서 문자열을 검색하는 방법
입력 파일을 지정하는 대신 다른 명령의 출력을
grep
파이프 한 다음 주어진 패턴과 일치하는 행만 표시 할 수 있습니다.
예를 들어, 사용자
www-data
로 시스템에서 실행중인 프로세스를 찾으려면 다음
ps
명령을 사용할 수 있습니다.
ps -ef | grep www-data
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
명령시 여러 파이프를 연결할 수도 있습니다. 위의 출력에서 볼 수 있듯이
grep
프로세스를 포함하는 라인도 있습니다. 해당 줄을 표시하지 않으려면 아래 표시된 것처럼 출력을 다른
grep
인스턴스로 전달하십시오.
ps -ef | grep www-data | grep -v grep
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
재귀 검색
패턴을 재귀 적으로 검색하려면
-r
옵션 (또는
--recursive
)을 사용하십시오. 재귀 적으로 발생하는 심볼릭 링크를 건너 뛰고 지정된 디렉토리의 모든 파일을 검색합니다. 모든 기호 링크를 따르려면
-R
옵션 (또는
--dereference-recursive
)을 사용하십시오.
다음 예에서는
/etc
디렉토리 내의 모든 파일에서
linuxize.com
문자열을 검색합니다.
grep -r linuxize.com /etc
이 명령은 파일의 전체 경로가 접두사로 일치하는 줄을 인쇄합니다.
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com;
-r
대신
-R
옵션을 사용하면
grep
은 모든 기호 링크를 따릅니다.
grep -R linuxize.com /etc
출력의 마지막 줄을 확인하십시오. Nginx의
sites-enabled
디렉토리 안에있는 파일들은
sites-available
디렉토리 안에있는 설정 파일들과 심볼릭 링크되어 있기 때문에 위의 예제에서 그 줄은 인쇄되지 않습니다.
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com; /etc/nginx/sites-enabled/linuxize.com: server_name linuxize.com www.linuxize.com;
파일 이름 만 표시
기본
grep
출력을 억제하고 일치하는 패턴을 포함하는 파일 이름 만 인쇄하려면
-l
(또는
--files-with-matches
) 옵션을 사용할 수 있습니다.
예를 들어 현재 작업 디렉토리에서
.conf
로 끝나는 모든 파일을 검색하고 문자열
linuxize.com
유형을 포함하는 파일 이름 만 인쇄하려면 다음을 수행하십시오.
grep -l linuxize.com *.conf
결과는 다음과 같습니다.
tmux.conf haproxy.conf
-l
옵션은 일반적으로 재귀 옵션
-R
과 함께 사용됩니다.
대소 문자를 구분하지 않는 검색
기본적으로
grep
명령은 대소 문자를 구분합니다. 이것은 대문자와 소문자가 구별되는 것으로 취급됨을 의미합니다.
검색시 대소 문자를 무시하려면
-i
옵션 (또는
--ignore-case
)을 사용하십시오.
예를 들어, 옵션없이
Zebra
를 검색 할 때 다음 명령은 출력을 표시하지 않습니다. 즉 일치하는 줄이 있습니다.
grep Zebra /usr/share/words
그러나
-i
옵션을 사용하여 대소 문자를 구분하지 않는 검색을 수행하면 대문자와 소문자가 모두 일치합니다.
grep -i Zebra /usr/share/words
"Zebra"를 지정하면 "zebra", "ZEbrA"또는 해당 문자열에 대한 대소 문자의 다른 조합과 일치합니다.
전체 단어 검색
"gnu"를 검색 할 때
grep
은 "cynus"또는 "magnum"과 같이 더 큰 단어로 "gnu"가 포함 된 행도 인쇄합니다.
grep gnu /usr/share/words
cygnus gnu interregnum lgnu9d lignum magnum magnuson sphagnum wingnut
지정된 문자열이 전체 단어 (단어가 아닌 문자로
--word-regexp
) 인
--word-regexp
하려면
-w
(또는
--word-regexp
) 옵션을 사용하십시오.
az
,
AZ
및
0-9
)와 밑줄 (
_
)이 포함됩니다. 다른 모든 문자는 단어가 아닌 문자로 간주됩니다.
grep -w gnu /usr/share/words
줄 번호 표시
패턴과 일치하는 문자열을 포함하는 행 수를 표시하려면
-n
(또는
--line-number
) 옵션을 사용하십시오. 이 옵션을 사용하면
grep
은 찾은 줄 번호가 앞에 붙은 표준 출력에 일치하는 항목을 인쇄합니다.
예를 들어, 일치하는 줄 번호로 접두사가 붙은 문자열
bash
포함하는
/etc/services
파일의 줄을 표시하려면 다음 명령을 사용할 수 있습니다.
grep -n 10000 /etc/services
아래 출력은 10423 및 10424 행에서 일치하는 항목이 있음을 보여줍니다.
10423:ndmp 10000/tcp 10424:ndmp 10000/udp
개수 일치
일치하는 행 수를 표준 출력에 인쇄하려면
-c
(또는
--count
) 옵션을 사용하십시오.
아래 예에서는
/usr/bin/zsh
를 셸로 사용하는 계정 수를 계산합니다.
grep -c '/usr/bin/zsh' /etc/passwd
여러 문자열 검색 (패턴)
OR 연산자를 사용하여 둘 이상의 검색 패턴을 결합 할 수 있습니다..
기본적으로
grep
은 패턴을 기본 정규 표현식으로 해석합니다. 특별한 의미를 잃고 백 슬래시 버전을 사용해야합니다.
아래 예에서는 Nginx 로그 오류 파일에서
fatal
,
error
및
critical
단어를 모두 검색합니다.
grep 'fatal\|error\|critical' /var/log/nginx/error.log
grep -E 'fatal|error|critical' /var/log/nginx/error.log
저소음 모드
-q
(또는
--quiet
)는
grep
에게 터미널에 아무것도 쓰지 않도록 지시합니다 (표준 출력). 일치하는 것이 있으면 명령은 상태
0
종료됩니다. 파일에 문자열이 포함되어 있는지 확인하고 결과에 따라 특정 작업을 수행하려는 쉘 스크립트에서
grep
을 사용할 때 유용합니다.
다음은
if
문에서
grep
을 자동 모드로 테스트 명령으로 사용하는 예입니다.
if grep -q PATTERN filename then echo pattern found else echo pattern not found fi
기본 정규식
GNU Grep에는 Basic과 Extended의 두 가지 정규 표현식 기능 세트가 있습니다. 기본적으로
grep
은 패턴을 기본 정규식으로 해석합니다.
기본 정규식 모드에서 사용될 때 메타 문자를 제외한 다른 모든 문자는 실제로는 자신과 일치하는 정규식입니다. 다음은 가장 일반적으로 사용되는 메타 문자 목록입니다.
-
^
(캐럿) 기호를 사용하여 행 시작 부분의 표현식을 일치 시키십시오. 다음 예제에서^kangaroo
문자열은 줄의 맨 처음에 나타나는 경우에만 일치합니다.grep "^kangaroo" file.txt
$
(달러) 기호를 사용하여 행 끝에 표현식을 일치 시키십시오. 다음 예에서 문자열kangaroo$
는 줄의 끝에서 발생하는 경우에만 일치합니다.grep "kangaroo$" file.txt
를 사용하십시오
.
단일 문자와 일치하는 (마침표) 기호 예를 들어,kan
시작하고 두 개의 문자가 있고 문자열roo
끝나는 것을 일치 시키려면 다음 패턴을 사용할 수 있습니다.grep "kan..roo" file.txt
사용하다
accept
또는“accent
를 포함하는 행을 찾으면 다음 패턴을 사용할 수 있습니다.grep "accet" file.txt
사용하다
coca
,cobalt
등과 같이co(any_letter_except_l)a
포함하는 문자열 조합과 일치하지만cola
포함하는 행과는 일치하지 않습니다.grep "coa" file.txt
다음 문자의 특수한 의미를 피하려면
\
(백 슬래시) 기호를 사용하십시오.
확장 정규 표현식
패턴을 확장 정규식으로 해석하려면
-E
(또는
--extended-regexp
) 옵션을 사용하십시오. 확장 정규식에는 모든 기본 메타 문자와 추가 메타 문자가 포함되어보다 복잡하고 강력한 검색 패턴을 만듭니다. 다음은 몇 가지 예입니다.
-
주어진 파일에서 모든 이메일 주소를 일치시키고 추출하십시오.
grep -E -o "\b+@+\.{2, 6}\b" file.txt
주어진 파일에서 유효한 모든 IP 주소를 일치시키고 추출하십시오.
grep -E -o '(25|2|??)\.(25|2|??)\.(25|2|??)\.(25|2|??)' file.txt
-o
옵션은 일치하는 문자열 만 인쇄하는 데 사용됩니다.
경기 전 라인 인쇄
줄을 일치시키기 전에 특정 줄 수를 인쇄하려면
-B
(또는
--before-context
) 옵션을 사용하십시오.
예를 들어, 행을 일치시키기 전에 5 행의 선행 컨텍스트를 표시하려면 다음 명령을 사용하십시오.
경기 후 라인 인쇄
줄을 일치시킨 후 특정 줄 수를 인쇄하려면
-A
(또는
--after-context
) 옵션을 사용하십시오.
예를 들어 줄을 일치시킨 후 후행 컨텍스트의 다섯 줄을 표시하려면 다음 명령을 사용합니다.
결론
grep
명령을 사용하면 파일 내부에서 패턴을 검색 할 수 있습니다. 일치하는 경우 grep은 지정된 패턴을 포함하는 행을 인쇄합니다.
Grep 사용자 매뉴얼 페이지에서 Grep에 대해 더 많은 정보를 얻을 수 있습니다.
grep 터미널텍스트 파일에서 정보 찾기 색인 파일 검색 단어 Lite
색인 파일 검색 단어 Lite는 자신의 Google과 비슷하지만 많은 텍스트 파일 하드 디스크에 있습니다.
검토 : 문서 메타 데이터 클리너는 파일에서 개인 식별 가능 메타 데이터 제거
문서에 대한 메타 데이터, 문서 작성 시점, 작성자, 마지막 편집 시간 등을 확인할 수 있습니다. 이 정보를 비밀로 유지하기로 결정한 경우 문서 메타 데이터 클리너가 도움이 될 수 있습니다.
파일에서 아이콘 : DLL, EXE 파일에서 아이콘을 추출하는 프리웨어 exe, psd, ocx, dll, ico, apk 등, 프리웨어 파일에서 아이콘. jpg, gif, png 등의 파일로 저장하십시오. 여기에 무료 소프트웨어를 다운로드하십시오.
우리는 일상 생활에서 우리가 접하게되는 대부분의 소프트웨어를 가지고 있습니다. 일반적으로