개인 IP를 제거하려는 대규모 AWS ELB 로그 파일이 있습니다. 예를 들면 다음과 같습니다.
2018-06-03T23:59:57.000Z 66.249.66.129,10.0.1.81 [03/Jun/2018:23:59:57 +0000] "GET http://www.domain0.com/latest-news/dubai-duty-free-sales-rise-11-q1-12-04-2018/ HTTP/1.1" 200 16669 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
2018-06-03T23:59:58.000Z 82.113.167.2,10.0.1.132 [03/Jun/2018:23:59:58 +0000] "GET http://www.domain3.com/feed HTTP/1.1" 200 17144 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11"
2018-06-03T23:59:58.000Z 192.243.55.95,10.0.1.81 [03/Jun/2018:23:59:58 +0000] "GET http://www.domain1.com/feed/ HTTP/1.1" 200 18532 "https://www.domain1.com/feed" "Mozilla/5.0 (compatible; SemrushBot/1.0~bm; +http://www.semrush.com/bot.html)"
2018-06-03T23:59:58.000Z 207.46.13.236,10.0.1.81 [03/Jun/2018:23:59:58 +0000] "GET http://www.domain.com/blogs/gadget-master/general/brightsparks-trophies-make-mark-2017-05/https/blogs/distribution-world/page/9/ HTTP/1.1" 200 16339 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
2018-06-03T23:59:59.000Z 62.210.215.100,10.0.1.81 [03/Jun/2018:23:59:59 +0000] "GET http://www.domain.com/electro-ramblings/tag/blog/feed/ HTTP/1.1" 200 1664 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.66 Safari/537.36"`, "\n")
정규식을 알려줘
하지만 실행해 보면
cat logs.txt | sed '/T/s/T/:/1' | sed -E 's/,10.0/ /g'
하지만 이것은 단지 반환
2018-06-03:23:59:57.000Z 66.249.66.129 .1.81
...
,
sed에서 정규식을 사용하여 파일에서 개인 IP를 제거하는 방법은 무엇입니까 ?
어떤 조언이라도 대단히 감사하겠습니다.
답변1
요구 사항은 "개인" IP(10...)를 제거하는 것이므로 ender.qa에서 제공하는 정규식은 다음과 같이 정제될 수 있습니다.
sed -E '/T/s/T/:/1; s/,10\.([0-9]{1,3}.){2}[0-9]{1,3}//g' file
또는 IP에 공백이 포함되어 있지 않으므로 더 짧습니다.
sed -E '/T/s/T/:/1; s/,10\.[^ ]*//g' file
답변2
"이전 데이터"를 원하는 것 같습니다.
2018-06-03T23:59:57.000Z 66.249.66.129,10.0.1.81 [03/Jun/2018:23:59:57 +0000] ...
"이후 데이터"가 됩니다:
2018-06-03:23:59:57.000Z 66.249.66.129 [03/Jun/2018:23:59:57 +0000] ...
그렇죠?
다음의 경우:
cat logs.txt | sed '/T/s/T/:/1' | sed -e 's/,.*\[//g'
또한 다음이 필요하지 않습니다 cat
.
sed '/T/s/T/:/1' logs.txt | sed -e 's/,.*\[/ \[/g'
기본적으로 이스케이프해야 하는 쉼표(,)와 왼쪽 대괄호([) 사이의 모든 문자(.*)를 제거하려고 합니다.
IP 주소만 삭제하고 싶은 경우
sed '/T/s/T/:/1' logs.txt | sed -re 's/,([0-9]{1,3}\.){3}[0-9]{1,3}//g'
또는
sed '/T/s/T/:/1' logs.txt | sed -e 's/,\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}//g'
답변3
아니요상당히무엇을 요구하고 계시나요? 그런데 이게 보여요사용하는 방법grepcidr
필터링하다 (제거하다)철사파일에는 개인 주소 범위 10.0.0.0-10.255.255.255 의 IP 주소가 포함되어 있습니다 file
.
grepcidr -v '10.0.0.0-10.255.255.255' file
동일하지만 CIDR 네트워크 블록 구문을 사용합니다.
grepcidr -v '10.0.0.0/8' file