grep 정리를 하다가 3년 전에 쓰려다 만 글을 꺼내서 추가 기재한다.
이렇게 쌓인 숙제를 하나 씩 해결하면 언젠가 끝날 숙제!
어쨌든 아래와 같다.
0. grep: 파일에서 지정된 패턴을 검색합니다. 패턴에 해당하는 모든 라인을 표시한다.
grep "패턴" 파일 명
grep 을 기본밖에 안 써서, 조금 더 잘 써보려고 상세 정리를 했다.
기본 형식은 아래와 같다.
grep [옵션] 패턴 파일
[자주 사용되는 grep 옵션]
1. -i (ignore case): 대소문자를 구분하지 않고 검색한다.
grep -i "찾는 문자열" file.txt
의외로 이건 별로 안 썼던 것 같다.
보통 log 파일 뒤져 보느라 썼는데, equal 검색만 필요했기 때문이다.
예시 : 특정 디렉토리에서 대소문자 구분 없이 "error" 문자열 검색
grep -i "error" /var/log/syslog
2. -r 또는 -R (recursive): 디렉토리 내의 모든 파일을 재귀적으로 검색한다.
grep -r "찾는 문자열" /path/to/directory
예시 : 현재 디렉토리와 하위 디렉토리에서 "TODO" 주석 검색
grep -r "TODO" .
3. -v (invert match): 패턴과 일치하지 않는 라인을 출력한다.
grep -v "찾는 문자열" file.txt
예시 : 특정 패턴을 포함하지 않는 라인 출력
grep -v "DEBUG" application.log
4. -c (count): 패턴과 일치하는 라인의 개수를 출력한다.
grep -c "찾는 문자열" file.txt
5. -l (files with matches): 패턴과 일치하는 라인이 있는 파일의 이름을 출력한다.
grep -l "찾는 문자열" *.txt
이걸 많이 썼다!
6. -n (line number): 일치하는 라인의 번호와 함께 출력한다.
grep -n "찾는 문자열" file.txt
예시 : 파일에서 패턴이 일치하는 라인의 번호와 함께 출력
grep -n "ERROR" application.log
7. -H (with filename): 일치하는 라인의 파일 이름을 항상 출력한다.
grep -H "찾는 문자열" file.txt
이것도 많이 썼다!
8. -A (after context): 일치하는 라인과 함께 이후의 N 라인을 출력한다.
grep -A 3 "찾는 문자열" file.txt
예시는 3 라인이다.
9. -B (before context): 일치하는 라인과 함께 이전의 N 라인을 출력한다.
grep -B 3 "찾는 문자열" file.txt
10. -C (context): 일치하는 라인과 함께 이전 및 이후 N 라인을 출력한다.
grep -C 3 "찾는 문자열" file.txt
예시 : 파일에서 패턴 일치 라인의 개수 출력
grep -c "WARN" application.log
11. -E (extended regex): 확장 정규 표현식을 사용한다.
grep -E "pattern1|pattern2" file.txt
12. -f (file): 패턴을 파일에서 읽어온다.
grep -f patterns.txt file.txt
13. -o (only matching): 일치하는 부분만 출력한다.
grep -o "찾는 문자열" file.txt
이 것도 많이 써보려고 한다!
14. --color: 일치하는 부분을 색깔로 강조한다.
grep --color "찾는 문자열" file.txt
기본적으로 위와 같이 사용하지만, 다른 명령어랑 섞어서 좀 명석하게 써 보고 싶으면 아래와 같이 쓴다.
사실 한 번 만들어 놓고 위에 올려서 쓰다가, 머리를 좀 써 보려고 새로 정리 하고 있다.
chatgpt가 나오고 나서는 아예 명령어를 머리 속에서 외주를 줘버려서, 좀 외우고 살아야겠다고 생각했다.
1. cat과 함께 사용
(1) 특정 단어를 포함한 라인만 출력
cat file.txt | grep "찾는 문자열"
이 걸 많이 썼다!
(2) 여러 파일에서 특정 단어를 검색
cat file1.txt file2.txt | grep "찾는 문자열"
(3) 특정 단어를 포함하지 않는 라인만 출력
cat file.txt | grep -v "찾는 문자열"
2. ping과 함께 사용
(1) 네트워크 연결 상태를 확인하며 응답에서 특정 단어 필터링
ping -c 4 google.com | grep "time="
(2) 패킷 손실 여부 확인
ping -c 4 google.com | grep "packet loss"
3. ps와 함께 사용
(1) 실행 중인 프로세스 중 특정 프로세스 찾기
ps aux | grep "process_name"
(2) 특정 사용자에 의해 실행된 프로세스 찾기
ps aux | grep "username"
4. ls와 함께 사용
(1) 디렉토리 내 특정 확장자를 가진 파일 목록
ls -l | grep "\.txt$"
(2) 숨김 파일 제외
ls -la | grep -v "^\."
5. dmesg와 함께 사용
(1) 부팅 메시지에서 특정 키워드 검색
dmesg | grep "error"
한 번도 안 써봤다! 충격!
커널 메모리 버퍼 관련 명령어는 권한도 없기도 하고 공부 할 때 빼고는 안 써볼 것 같아서 빼지 않고 기재한다.
(2) 최근 커널 로그에서 USB 관련 메시지 찾기
dmesg | grep -i "usb"
6. find와 함께 사용
(1) 특정 디렉토리에서 파일 검색 후 내용 검색
find /path/to/directory -type f -name "*.txt" -exec grep "찾는 문자열" {} \;
(2) 특정 확장자를 가진 파일 내용 검색
find . -name "*.log" | xargs grep "찾는 문자열"
7. awk와 함께 사용
(1) awk로 특정 필드 추출 후 패턴 검색
awk '{print $2}' file.txt | grep "찾는 문자열"
(2) 로그 파일에서 특정 시간대의 로그 검색
awk '/2024-08-29 12:00:00/,/2024-08-29 12:59:59/' logfile.log | grep "ERROR"
8. tail과 함께 사용 (매우 많이 쓴다!)
(1) 실시간 로그 모니터링 중 특정 단어 필터링
tail -f logfile.log | grep "찾는 문자열"
9. sort와 함께 사용
(1) 중복되지 않은 단어 목록 추출 및 정렬
cat file.txt | grep "찾는 문자열" | sort | uniq
(2) 특정 단어 포함 라인을 정렬하여 출력
grep "찾는 문자열" file.txt | sort
10. sed와 함께 사용
(1) 특정 패턴을 가진 라인을 출력하고, 해당 라인에서 문자열 치환
grep "찾는 문자열" file.txt | sed 's/old_string/new_string/g'
(2) 특정 단어를 포함한 라인을 제외하고 나머지 라인만 출력
grep -v "찾는 문자열" file.txt | sed '/unwanted_pattern/d'
11. 종합 예시
(1) ps, grep, awk를 조합하여 특정 프로세스의 메모리 사용량 출력
ps aux | grep "process_name" | awk '{print $4}'
(2) find, grep, sort, uniq를 조합하여 특정 디렉토리 내에서 특정 단어를 포함한 파일 목록을 중복 제거 후 정렬
find /path/to/directory -type f -exec grep -l "찾는 문자열" {} + | sort | uniq
grep 이후에 많이 쓰는 명령어는 아래와 같다.
1. 파일 / 디렉토리 목록 표시
ls : 디렉토리 파일 / 목록 표시
ll = ls -l : 자세한 정보도 포함해서 표시
2. 디렉토리 변경
cd : 이동!
3. 현재 경로 표시
pwd : 현재 위치한 경로 표시
4. 새 디렉토리 생성
mkdir 새디렉토리명
5. 파일 / 디렉토리 삭제
rm 파일명
rm -r 디렉토리명
: -r 옵션을 넣으면 디렉토리/내용 재귀 삭제가 된다.
6. 파일 / 디렉토리 복사
cp 원본 대상
cp -r 디렉토리 원하는_위치
7. 파일 / 디렉토리 이동 or 이름 변경
mv 원본 대상
8. 파일 생성 or 수정 시간 변경
touch 파일명
9. 파일 내용 화면 표시
cat 파일명
: 사실 이걸로 많이 안 보고 vim으로 본 것 같은데 나만 그런 걸 수도 있으니 조용히 있는다.
10. 파일 내용 페이지 단위로 표시
기본적으로 more는 한 페이지씩 넘어가고, less는 스크롤로 보여준다.
more 파일명
less 파일명
11. 호스트 or IP 주소에 대한 네트어크 연결 테스트
연결 상태, 응답 시간을 확인 가능하다.
ping 호스트명 또는 IP주소
12. 현재 실행 중인 프로세스 목록 표시
-aux 옵션을 사용하면 상세 정보를 보여준다.
ps
ps -aux
13. 프로세 종료
특정 프로세스 ID를 사용해서 종료한다.
kill 프로세스ID
14. 파일 / 디렉토리 권한 변경
권한은 숫자로도 설정 가능하다. (rwx or 755 처럼)
chmod 권한 파일명
chmod 755 파일명 (예: 읽기/쓰기/실행 권한 부여)
15. 파일 / 디렉토리의 소유자 변경
chown 사용자명:그룹명 파일명
16. 파일 / 디렉토리를 아카이브하거나 압축을 해제
-c 옵션은 아카이브 생성, -x 옵션은 압축 해제를 한다.
tar -cvf 아카이브파일명.tar 디렉토리명
tar -xvf 아카이브파일명.tar
17. 인터넷에서 파일 다운로드
wget URL
댓글
댓글 쓰기