정규식을 사용하여 줄에서 특정 부분 추출

정규식을 사용하여 줄에서 특정 부분 추출

내 파일에는 다음 줄이 포함되어 있습니다.

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 로그 파일처럼 보이지만 정확한 형식의 모든 변형을 기억하지 못하므로 아마도 가정을 하고 있는 것 같습니다.)

관련 정보