C 언어 재 학습 - grep 명령 (전)
15518 단어 C 언어 재 학습
옵션
$ grep --h
: grep [ ]... PATTERN [FILE]...
FILE PATTERN。
PATTERN ( BRE)。
: grep -i 'hello world' menu.h main.c
:
-E, --extended-regexp PATTERN ( ERE)
-F, --fixed-strings PATTERN 。
-G, --basic-regexp PATTERN ( BRE)
-P, --perl-regexp PATTERN Perl
-e, --regexp=PATTERN PATTERN
-f, --file=FILE FILE PATTERN
-i, --ignore-case
-w, --word-regexp PATTERN
-x, --line-regexp PATTERN
-z, --null-data 0 ,
:
-s, --no-messages
-v, --invert-match
-V, --version
--help
--mmap
Output control:
-m, --max-count=NUM stop after NUM matches
-b, --byte-offset print the byte offset with output lines
-n, --line-number print line number with output lines
--line-buffered flush output on every line
-H, --with-filename print the file name for each match
-h, --no-filename suppress the file name prefix on output
--label=LABEL use LABEL as the standard input file name prefix
-o, --only-matching PATTERN
-q, --quiet, --silent
--binary-files=TYPE TYPE ;
TYPE `binary', `text', `without-match'
-a, --text --binary-files=text
-I --binary-files=without-match
-d, --directories=ACTION ;
ACTION `read', `recurse', `skip'
-D, --devices=ACTION 、 、 ;
ACTION `read' `skip'
-R, -r, --recursive --directories=recurse
--include=FILE_PATTERN FILE_PATTERN
--exclude=FILE_PATTERN FILE_PATTERN
--exclude-from=FILE FILE
--exclude-dir=PATTERN PATTERN 。
-L, --files-without-match FILEs
-l, --files-with-matches FILES
-c, --count FILE
-T, --initial-tab tabs ( )
-Z, --null FILE
:
-B, --before-context=NUM NUM
-A, --after-context=NUM NUM
-C, --context=NUM NUM
-NUM --context=NUM
--color[=WHEN],
--colour[=WHEN] ;
WHEN `always', `never' `auto'
-U, --binary CR (MSDOS )
-u, --unix-byte-offsets CR , (MSDOS )
‘egrep’ ‘grep -E’。‘fgrep’ ‘grep -F’。
‘egrep’ ‘fgrep’ 。
FILE , FILE -, 。 FILE
-h 。 , 0, 1;
, -q , 2。
: [email protected]
GNU Grep :
GNU :
실례
참조: grep 명령 중국어 매 뉴 얼 참조: grep 명령 아래 는 GNU grep 의 사용 예제 입 니 다.
grep -i 'hello.*world' menu.h main.c
이 명령 은 menu. h 와 main. c 에 'hello' 문자열 이 포함 되 어 있 고 'World' 문자열 이 있 는 모든 줄 을 보 여 주 는 데 사 용 됩 니 다. hello 와 World 사이 에 여러 글자 가 있 을 수 있 습 니 다.정규 표현 식 의 '- i' 옵션 을 사용 하면 grep 가 대소 문 자 를 무시 하기 때문에 'Hello, World!' 와 일치 할 수 있 습 니 다.다음은 grep 를 사용 할 때 흔히 볼 수 있 는 문제 와 답 입 니 다.1. 일치 하 는 파일 이름 을 어떻게 표시 합 니까?
grep -l 'main' *.c
현재 디 렉 터 리 아래 'c' 로 끝 나 는 모든 파일 이름 을 보 여 줍 니 다. 파일 에 'main' 문자열 이 포 함 된 파일 이름 입 니 다.
2. 검색 디 렉 터 리 를 어떻게 재 귀적 합 니까?
grep -r 'hello' /home/gigi
/ home / gigi 디 렉 터 리 에 있 는 모든 파일 을 검색 하고 파일 에 'hello' 문자열 이 포함 되 어 있 습 니 다.검색 한 파일 을 유연 하 게 제어 하려 면 find 와 xargs 명령 을 결합 하여 사용 할 수 있 습 니 다.예 를 들 어 아래 의 예 는 C 원본 파일 만 검색 합 니 다.
find /home/gigi -name '*.c' -print0 | xargs -0r grep -H 'hello'
이것 은 아래 명령 과 다르다.
grep -rH 'hello' *.c
이것 은 현재 디 렉 터 리 에서 'c' 로 끝 나 는 파일 만 검색 합 니 다.현재 디 렉 터 리 에 'c' 로 끝 나 는 디 렉 터 리 가 있 는 경 우 를 제외 하고 '- r' 옵션 은 기본적으로 불필요 한 것 입 니 다.위의 find 명령 은 아래 명령 과 유사 합 니 다:
grep -rH --include='*.c' 'hello' /home/gigi
3. pattern 이 짧 은 횡선 으로 시작 하면 어떻게 되 나 요?
grep -e '--cut here--' *
검색 "– cut here –".그러나 "- e" 옵션 을 지정 하지 않 으 면 grep 는 "- cut here" 를 일련의 옵션 으로 해석 할 수 있 습 니 다.
4. 단어의 일부분 이 아 닌 전체 단 어 를 어떻게 검색 합 니까?
grep -w 'hello' *
현재 디 렉 터 리 에 있 는 모든 파일 을 검색 하고 'hello' 단 어 를 포함 하 는 파일 을 찾 습 니 다. 'Othello' 와 일치 하지 않 습 니 다.더 유연 한 제 어 는 단어의 시작 과 끝 에 맞 게 '\' 를 사용 할 수 있 습 니 다.예 를 들 면:
grep 'hello\>' *
'hello' 의 끝 에 있 는 단어 만 검색 하기 때문에 'Othello' 와 일치 할 수 있 습 니 다.
5. 일치 하 는 줄 의 상하 몇 줄 을 어떻게 출력 합 니까?
grep -C 2 'hello' *
이것 은 출력 일치 줄 과 앞 뒤 두 줄 을 출력 합 니 다.
6. 어떻게 grep 즉 출력 일치 줄 과 출력 파일 이름 을 강제 합 니까?파일 목록 에 '/ dev / null' 만 추가 하면 됩 니 다.
grep 'eli' /etc/passwd /dev/null
획득:
/etc/passwd:eli:x:2098:1000:Eli Smith:/home/eli:/bin/bash
GNU 확장 옵션 도 사용 할 수 있 습 니 다. "- H":
grep -H 'eli' /etc/passwd
7. 왜 누군가가 ps 뒤에 이상 한 정규 표현 식 을 사용 합 니까?
ps -ef | grep '[c]ron'
pattern 에 괄호 를 붙 이지 않 으 면 cron 문자열 을 포함 하 는 프로 세 스 와 일치 합 니 다. grep 명령 의 표현 식 에 cron 문자열 이 포함 되 어 있 기 때 문 입 니 다.그러나 괄호 를 붙 였 다 면 grep 명령 행 에는 'c' ron '문자열 이 포함 되 어 있 고 grep 에 일치 하 는 문자열 은' c 'ron 이 아 닌 cron 입 니 다.출력 결과 에 있어 서 이것 은 아래 명령 과 같 습 니 다.
ps -ef | grep 'cron' | grep -v 'grep'
8. 왜 grep 결과 에서 "Binary file matches" 를 보고 합 니까?grep 가 바 이 너 리 파일 에 있 는 모든 일치 하 는 줄 을 표시 하면 난잡 한 쓸모없는 정 보 를 만 들 수 있 기 때문에 GNU 의 grep 는 기본적으로 이러한 출력 을 금지 합 니 다.바 이 너 리 내용 을 출력 하려 면 '- a' 또는 '- binary - files = text' 옵션 을 사용 하 십시오.
9. 왜 'grep - lv' 는 일치 하지 않 는 줄 을 포함 하 는 파일 이름 을 출력 합 니까?grep - lv '는 일치 하지 않 는 줄 이나 여러 줄 을 포함 하 는 파일 이름 을 보 여 줍 니 다.일치 하 는 내용 이 없 는 파일 이름 을 표시 하려 면 '- L' 옵션 을 사용 하 십시오.(주: 예 를 들 어 a. txt 의 한 줄 이 일치 하지 않 습 니 다. 한 줄 이 일치 하지 않 고 b. txt 에서 전혀 일치 하지 않 으 면 grep - lv 는 b. txt 가 아 닌 a. txt 를 출력 합 니 다. 따라서 '- v' 옵션 의 작업 우선 순 위 는 '- l' 보다 높 습 니 다. 즉, 반전 줄 을 검색 한 다음 에 반전 줄 을 포함 하 는 파일 을 출력 합 니 다)
10. "사용" | "or 논 리 를 실현 할 수 있 습 니 다. AND 논 리 를 어떻게 실현 합 니까?
grep 'paul' /etc/motd | grep 'franc,ois'
"paul" 과 "franc, ois" 를 동시에 포함 하 는 모든 줄 을 검색 합 니 다.
11. 파일 과 표준 입력 을 동시에 검색 하 는 방법 은 무엇 입 니까?"표준 입력 파일 이름 대신" - "사용 하면 됩 니 다:
cat /etc/passwd | grep 'alain' - /etc/motd
12. 정규 표현 식 에서 회 문 구 조 를 어떻게 표현 합 니까?
grep -w -e '\(.\)\(.\).\2\1' file
그것 은 단어 'radar' 나 'civic' 와 일치 할 수 있 습 니 다.Guglielmo Bondioni 는 19 개의 답장 구 조 를 검색 할 수 있 는 정규 표현 식 을 제 시 했 습 니 다. 그 중에서 9 개의 키 표현 식 과 9 개의 역방향 인용 을 사 용 했 습 니 다.BRE 나 ERE 는 최대 9 개의 역방향 인용 만 지원 하기 때문이다.
grep -E -e '^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?).?\9\8\7\6\5\4\3\2\1$' file
13. 왜 역방향 인용 은 효력 을 잃 습 니까?
echo 'ba' | grep -E '(a)\1|b\1'
이것 은 어떤 내용 도 출력 하지 않 습 니 다. 왼쪽 표현 식 '(a) \ 1' 이 일치 하지 않 기 때 문 입 니 다. 입력 데이터 에 'aa' 가 없 기 때문에 오른쪽 '\ 1' 은 어떤 내용 도 인용 할 수 없습니다. 아무것도 일치 하지 않 는 다 는 것 을 의미 합 니 다.(이 예 에서 오른쪽 표현 식 은 왼쪽 표현 식 이 성공 적 으로 일치 할 때 만 유효 합 니 다.) 주: 테스트 를 통 해 왼쪽 표현 식 이 일치 하 더 라 도 오른쪽 표현 식 에서 왼쪽 그룹 을 참조 할 때 유효 하지 않 습 니 다.예 를 들 어 'echo' baaca '| grep - E' (a) \ 1 | c \ 1 '은 그 중의' aa '와 일치 하지만' ca '와 일치 하지 않 습 니 다.
14. grep 는 어떻게 줄 을 넘 어 일치 합 니까?표준 grep 는 줄 을 기반 으로 읽 기 때문에 이 기능 을 실현 할 수 없습니다.따라서 문자 클래스 만 사용 합 니 다.GNU 의 grep 에는 "z" 옵션 이 있 습 니 다. "\ 0" 으로 끝 나 는 줄 을 처리 할 수 있 습 니 다.따라서 입력 데이터 의 줄 바 꿈 자 를 일치 시 킬 수 있 지만 출력 결과 가 일치 하 는 줄 뿐만 아니 라 모든 내용 을 출력 할 수 있 기 때문에 '- q' 와 같은 출력 제어 옵션 을 결합 하여 사용 해 야 합 니 다.예 를 들 면:
printf 'foo
bar
abc' | grep -z 'foo[[:space:]]\+bar'
printf 'foo
bar
abc' | grep -z -q 'foo[[:space:]]\+bar'
만약 에 이것 이 수 요 를 만족 시 키 지 못 한다 면 입력 데 이 터 를 형식 으로 변환 한 다음 에 grep 에 전달 하거나 grep 대신 다른 도 구 를 사용 할 수 있 습 니 다. 예 를 들 어 'sed', 'awk', 'perl' 또는 다른 많은 도 구 를 사용 할 수 있 습 니 다.15. "grep", "fgrep" 과 "egrep" 은 무엇 을 대표 합 니까? "grep 라 는 이름 은 유 닉 스에 서 줄 편집 을 하 는 방식 에서 나 왔 다.예 를 들 어 'ed' 는 다음 문법 을 사용 하여 화면 에 일치 하 는 줄 의 목록 을 인쇄 합 니 다.
global/regular expression/print
g/re/p
'fgrep' 은 고정 'grep' 을 대표 합 니 다. 'egrep '는 확 장 된' grep '을 대표 합 니 다.