내 파일에는 다음 줄이 포함되어 있습니다.
50.57.61.8 - - [04/Apr/2019:09:52:01 -0400] "GET /tracker.php?q=1&p=2 HTTP/1.1" 302 20 "-" "Rackspace Monitoring/1.1 (https://monitoring.api.rackspacecloud.com)"
50.57.61.9 - - [04/Apr/2019:09:52:01 -0400] "GET /tracker.php?q=1&p=2 HTTP/1.1" 302 20 "-" "Rackspace Monitoring/1.1 (https://monitoring.api.rackspacecloud.com)"
이제 다음과 같은 결과를 얻고 싶습니다.
50.57.61.8 - - [04/Apr/2019:09:52:01 -0400] "GET /tracker.php?q=1&p=2 HTTP/1.1"
50.57.61.9 - - [04/Apr/2019:09:52:01 -0400] "GET /tracker.php?q=1&p=2 HTTP/1.1"
Linux 명령(grep/cut... 등)을 사용하여 이를 어떻게 달성할 수 있습니까?
답변1
적어도 이 특정 데이터 (*) 에 대해서는 다음과 같습니다 .
를 사용하여 cut
공백으로 구분된 처음 8개 필드를 가져옵니다.
$ cut -d' ' -f1-8 < someinputfile
50.57.61.8 - - [04/Apr/2019:09:52:01 -0400] "GET /tracker.php?q=1&p=2 HTTP/1.1"
50.57.61.9 - - [04/Apr/2019:09:52:01 -0400] "GET /tracker.php?q=1&p=2 HTTP/1.1"
sed
, 사용 및 정규식을 사용하여 s///
첫 번째 큰따옴표, 공백 및 그 뒤의 모든 항목을 제거하고 따옴표를 다시 넣으십시오.
$ sed -e 's/" .*/"/' < someinputfile
50.57.61.8 - - [04/Apr/2019:09:52:01 -0400] "GET /tracker.php?q=1&p=2 HTTP/1.1"
50.57.61.9 - - [04/Apr/2019:09:52:01 -0400] "GET /tracker.php?q=1&p=2 HTTP/1.1"
(*이것은 Apache 로그 파일처럼 보이지만 정확한 형식의 모든 변형을 기억하지 못하므로 아마도 가정을 하고 있는 것 같습니다.)