저는 리눅스를 처음 접했습니다. 시스템 관리자로 임명되고 싶습니다. 아마존에서 인터뷰했어요. 그들은 파일에서 "s"로 시작하고 "a"로 끝나는 문자열을 찾기 위해 cmd를 작성하라고 요청했습니다. grep을 사용해야 한다는 것은 알고 있지만 실제 상황은 모릅니다. 무엇보다도 그들은 grep이 어떻게 작동하는지 묻습니다. 누구든지 이 질문에 간단히 대답할 수 있습니까?
미리 감사드립니다
답변1
grep은 명명된 입력 파일(또는 파일 이름이 지정되지 않은 경우 또는 단일 하이픈 빼기 기호(-)가 파일 이름으로 제공되는 경우 표준 입력)에서 지정된 PATTERN과 일치하는 행을 검색합니다. 기본적으로 grep은 일치하는 줄을 인쇄합니다.
Grep 명령
Grep 및 해당 옵션
-v = non-matching lines
-c = count of matching lines
-i = Ignore case
-r = Read all files under each directory
-l = list the file which contain the searching keyword
^ = Search the Starting word of a file
.$ = Search the end word of a file
^$ = Search the empty lines in a file
특정 키워드와 일치하는 파일의 모든 행을 찾습니다.
grep sysadmin /etc/passwd
숫자 표시
grep -nv nologin /etc/passwd
키워드를 피하고 다른 키워드로 검색하세요
grep -v sysadmin /etc/passwd
검색 중인 키워드와 일치하는 행 수 계산
grep -c sysadmin /etc/passwd
대소문자를 무시하여 텍스트 검색
grep -i sysadmin /etc/passwd
/home
특정 패턴과 일치하는 텍스트를 찾기 위해 해당 하위 디렉터리의 모든 파일을 검색 하고 일치하는 줄을 인쇄합니다.
grep -ri sysadmin /home/
/home
특정 패턴과 일치하는 텍스트에 대해 해당 하위 디렉터리의 모든 파일을 검색하고 해당 텍스트가 포함된 파일을 나열합니다.
grep -ril sysadmin /home/
여러 IP 중 언급된 특정 IP를 검색해 보세요. 리터럴 문자 -F
와 일치하는지 확인하세요. 리터럴 문자가 없으면 모든 문자와 일치합니다..
.
grep -F "192.168.1.10" /var/log/syslog
다음으로 시작하는 줄 검색Feb
grep ^Feb /var/log/syslog
다음 문자로 끝나는 줄 검색queue
grep queue$ /var/log/mail.log
파일의 빈 줄 수 계산(공백이 포함된 줄은 계산되지 않음)
grep -c ^$ /var/log/mail.log
디렉터리 및 하위 디렉터리의 모든 파일에서 문자열 검색
grep -r "root" .
답변2
-P
GNU grep 명령의 (Perl-regex) 옵션을 사용해 보십시오.
grep -oP '\bs.*a\b' file
설명하다:
\b # Matches the word boundary(ie, match between a word character and a non word character)
s # Starting character would be a literal s.
.* # Matches any character zero or more times.
a # Matches a literal a.
\b # Matches the word boundary(ie, match between a word character and a non word character)