이것:
cat /var/log/apache2/other_vhosts_access.log |grep -m 1 123.123.123.123
첫 번째 IP 123.123.123.123을 알려주세요.
그러나 IP1이 처음 발생하는 방법그리고IP2가 처음으로 나타납니다.그리고IP3가 처음으로 등장그리고...?
이것은 분명히 작동하지 않지만 다음과 같은 아이디어를 제공합니다.
cat /var/log/apache2/other_vhosts_access.log |grep -m 1 123.123.123.123 AND 124.124.124.124 AND 125.125.125.125
답변1
이 작업을 수행하기 위해 awk를 사용하겠습니다(ip가 첫 번째 열이라고 가정).
awk '!seen[$1]++ && $1 ~ /123.123.123.123|124.124.124.124|125.125.125.125/' /var/log/apache2/other_vhosts_access.log
답변2
이것이 grep '123.123.123.123'
첫 번째 발생을 제공하지는 않습니다.123.123.123.123
지적 재산권그러나 패턴 123.123.123.123
과 일치 123.123.123.123
하지만 패턴과 일치하는 as는 단일 문자와 일치하는 정규식 연산자 1234123-123e123
입니다 ..
에서만 123\.123\.123\.123
일치 123.123.123.123
하지만 에서도 일치합니다 23\.123\.123\.1
. -F
고정 문자열 일치 옵션 도 참조하세요 .grep
여기서는 다음과 같이 합니다.
awk '
!ips_seen {ip[$0]; n++; next}
{
found = 0
for (i in ip)
if (index($0, i)) {
found = 1
delete ip[i]
n--
}
}
found
!n {exit}' ips.txt ips_seen=1 input.txt
여기에는 ips.txt
한 줄에 하나씩 IP 주소 목록이 포함됩니다.
한 줄에 여러 개의 IP가 포함되어 있으면 여전히 한 번만 인쇄됩니다.
하위 문자열 찾기만 사용하면 모든 문자를 일치시키는 위의 첫 번째 문제를 index()
해결할 수 있지만 .
두 번째 문제는 해결할 수 없습니다.