access.log 파일 안에, 특정 문자열 데이터를 추출 할 것입니다.
우선 파일을 찾아봅시다.
find
find는 리눅스에서 파일 및 디렉토리를 검색할 때 사용하는 명령입니다.
현재 위치에서 access.log를 파일의 이름으로 찾아보겠습니다. 이름으로 찾는 옵션은 -name 입니다.
~$ find ./ -name "a*.log"
access.log 파일만 추출 되었습니다.
이제 access.log 파일 안에 있는 내용을 살펴보겠습니다.
엄청 나게 많은 내용이 쌓여있네요. 이제 여기서 '/index.php/board' 라는 내용을 추출하겠습니다.
| (pipe)
다중 명령어인 | (pipe)를 사용하겠습니다.
| pipe는 두 개 이상의 명령어를 연결해 줍니다. 파이프 앞에서 실행한 명령어의 출력 결과를 파이프 뒤에 실행하는 명령어의 입력 값으로 처리합니다. 따라서 파이프를 사용하면 여러 명령어를 동시에 연결할 수 있습니다.
앞서 사용한 명령어 뒤에 사용해보겠습니다.
~$ find ./ -name "a*.log" |
그 다음에 문자열을 추출하는 명령어를 사용하겠습니다. 문자열을 검색하는 명령어는 grep입니다.
grep
하지만 grep만 사용할 수 없습니다. 왜냐하면 find 명령어의 출력 결과가 'access.log' 이기 때문입니다.
~$ find ./ -name "a*.log" | grep "/index.php/board"
그래서 위 명령어를 날리면, 아무런 문자열을 찾지 못합니다. 출력 결과인 access.log이란 문자열에서 검색하기 때문입니다.
xargs를 사용하면 파일 이름을 grep의 argument로 넘겨주기 때문에 파일 안에서 문자열을 검색할 수 있을 것 입니다.
~$ find ./ -name "a*.log" | xargs grep "/index.php/board"
몇개가 나왔는지 카운트 해봅시다.
grep의 -c 옵션을 줍니다.
~$ find ./ -name "a*.log" | xargs grep-c "index.php/board"
결과는 5가 나옵니다.
find | xargs grep
현재 디렉토리의 모든 파일에 대한 grep 명령어는 * 입니다.
~$ grep "index.php/board" *
대소문자 옵션을 주어 구분없이 검색해보자. 대소문자 미구분 옵션은 -i 이다.
~$ grep -i "index.php/board" *
하위 디렉토리까지 검색하는 옵션은 -r
~$ grep -r "cron" *
'IT지식 > 개발' 카테고리의 다른 글
[Linux] awk 명령어 사용하기. awk '{print}' (0) | 2020.02.16 |
---|---|
[Linux] grep으로 검색한 문자열에서 특정 문자 추출. uniq 중복 제거 안될 때. (cut uniq sort ) (0) | 2020.02.14 |
[GIT] 특정 파일만 받기 (0) | 2020.02.14 |
[mysql] DB에 한글이 insert 안 될 때 테이블의 charset를 변경하세요. (0) | 2020.02.13 |
GIT 여러 브랜치로 서비스 하기 (0) | 2020.02.12 |