다음 형식의 로그 파일이 있습니다.
Jul 13 21:47:41 192.168.100.254 "user from 192.168.100.101"
192.168.xx 범위의 IP가 포함된 모든 행을 제거해야 하지만 네 번째 열에 나타나는 경우에만 해당됩니다.
또한 192.168.xx 범위에서 3개의 IP를 제외해야 합니다. 이것을 부르자
192.168.125.100
192.168.126.100
192.168.155.240
이 명령을 완료하여 열 4에서 192.168.xx 범위의 모든 IP를 찾고 192.168.125.100, 192.168.126.100 및 192.168.155.240을 포함하는 행을 제외한 모든 행을 삭제하는 방법.
awk '{print $4}' file | grep '192.168' | "remove all found except" | > save back to original file
답변1
노력하다:
awk '{f=1} $4 ~ /^192.168/{f=0} $4 ~ /192.168.(125.100|126.100|155.240)/{f=1} f' file
예
다음 테스트 파일을 고려해보세요.
$ cat file
Jul 13 21:47:41 192.168.100.254 "user from 192.168.100.101"
Jul 13 21:47:41 192.168.125.100 "user from 192.168.100.101"
Jul 13 21:47:41 192.168.126.100 "user from 192.168.100.101"
Jul 13 21:47:41 192.168.155.240 "user from 192.168.100.101"
Jul 13 21:47:41 123.456.789.240 "user from 192.168.100.101"
귀하의 규칙에 대해 제가 이해한 바로는 위의 첫 번째 줄을 제외한 모든 항목을 유지하려고 합니다.
$ awk '{f=1} $4 ~ /^192.168/{f=0} $4 ~ /192.168.(125.100|126.100|155.240)/{f=1} f' file
Jul 13 21:47:41 192.168.125.100 "user from 192.168.100.101"
Jul 13 21:47:41 192.168.126.100 "user from 192.168.100.101"
Jul 13 21:47:41 192.168.155.240 "user from 192.168.100.101"
Jul 13 21:47:41 123.456.789.240 "user from 192.168.100.101"
여러 줄 버전
코드를 여러 줄에 걸쳐 분산시키려는 경우:
awk '
{
f=1
}
$4 ~ /^192.168/ {
f=0
}
$4 ~ /192.168.(125.100|126.100|155.240)/ {
f=1
}
f
' file
어떻게 작동하나요?
이 코드는 단일 변수를 사용합니다 f
. 줄을 유지하려면 을 설정합니다 f=1
. 그렇지 않으면 f
0으로 설정합니다.
f=1
먼저 행이 보존되어야 한다고 가정해 보겠습니다.
$4 ~ /^192.168/{f=0}
$4
로 시작하는 경우192.168
해당 줄을 우리가 잃어야 할 줄로 표시하세요.$4 ~ /192.168.(125.100|126.100|155.240)/{f=1}
이러한 세 가지 특수한 경우에는 행을 keeper: 로 표시하십시오
f=1
.f
이것은 awk의 비밀스러운 약칭입니다.
f
true(0이 아닌 경우)인 경우 해당 행을 인쇄합니다.
추가 테스트
의견을 바탕으로 file2를 시도해 보겠습니다.
$ cat file2
Jul 13 21:47:41 192.168.100.125 "user from 192.168.100.101"
Jul 13 21:47:41 192.168.202.150 "user from 192.168.100.101"
Jul 13 21:47:41 192.168.101.45 "user from 192.168.100.101"
이제 다음 명령을 실행해 보겠습니다.
$ awk '{f=1} $4 ~ /^192.168/{f=0} $4 ~ /192.168.(125.100|126.100|155.240)/{f=1} f' file2
$
이 줄은 모두 그대로 삭제됩니다.