
마지막 IP 주소 옥텟(4옥텟)을 0으로 바꾸는 방법
참고: Linux 시스템에서는 Perl에 의해 선형적으로 구현되어야 합니다.
예를 들어
192.9.200.124 will replaced to 192.9.200.0
완전한 예:
변경 전 IP 주소:
more file
10.140.4.10 10.140.4.10
192.9.201 192.9.201
44.44.44 44.44.44
100.100.1 100.100.1
10.140.4.11 10.140.4.11
45.0.0 45.0.0
10.219.39.188 10.219.39.188
10.219.39.189 10.219.39.189
10.140.4.12 10.140.4.12
10.219.39.138 10.219.39.138
10.219.39.139 10.219.39.139
예상 결과(IP 주소 변경)
more file
10.140.4.0 10.140.4.0
192.9.201 192.9.201
44.44.44 44.44.44
100.100.1 100.100.1
10.140.4.0 10.140.4.0
45.0.0 45.0.0
10.219.39.0 10.219.39.0
10.219.39.0 10.219.39.0
10.140.4.0 10.140.4.0
10.219.39.0 10.219.39.0
10.219.39.0 10.219.39.0
답변1
OP는 원래 다른 질문을 했습니다. 두 가지 질문에 답하는 두 가지 솔루션이 아래에 있으며, 유사하지만 약간 다릅니다.
첫 번째 솔루션
이렇게 하면 원하는 작업이 수행됩니다.
$ perl -pe 's/^((\d{1,3}\.){3})\d+$/${1}0/' sample.txt
10.140.4.0
192.9.201
44.44.44
100.100.1
10.140.4.0
45.0.0
10.219.39.0
10.219.39.0
10.140.4.0
10.219.39.0
10.219.39.0
설명하다
이 비트는 (\d{1,3}\.){3}
마침표가 뒤따르는 일련의 숫자(3)(1-3자리 길이)를 찾습니다. 이 값은 임시 변수($1)에 저장됩니다. 문자열 주위의 괄호에는 (\d{1,3}\.){3}). This sequence is then only matched if it's followed by a 4th octet (the 2nd \d+). All of this is then replaced with the first sequence (saved to
$1`)과 0이 붙습니다.
샘플 파일
다음은 제가 사용하는 샘플 파일입니다. OP는 Perl 한 줄짜리 코드가 추가 코드를 추가하지 않고 작동하는 것을 허용하지 않는 후행 공백 등이 포함된 파일을 게시했는데 이는 관련이 없어 보입니다.
# sample.txt
10.140.4.10
192.9.201
44.44.44
100.100.1
10.140.4.11
45.0.0
10.219.39.188
10.219.39.189
10.140.4.12
10.219.39.138
10.219.39.139
두 번째 해결책
$ perl -pe 's/^((\d{1,3}\.){3})\d+\s+((\d{1,3}\.){3})\d+/${1}0 ${3}0/'
10.140.4.0 10.140.4.0
192.9.201 192.9.201
44.44.44 44.44.44
100.100.1 100.100.1
10.140.4.0 10.140.4.0
45.0.0 45.0.0
10.219.39.0 10.219.39.0
10.219.39.0 10.219.39.0
10.140.4.0 10.140.4.0
10.219.39.0 10.219.39.0
10.219.39.0 10.219.39.0
답변2
perl -i -pe 's/(\d+\.){3}\K\d+/0/g' file
이는 \K
LookBehind 어설션처럼 작동하지만 가변 길이 패턴을 허용합니다.
답변3
sed
태그에 있으므로 답변은 다음과 같습니다 sed
.
sed '/[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+/s/\.[0-9]\+$/.0/'
답변4
한 가지 방법은 다음과 같습니다.
perl -lpe 's/\d+$/0/' filename
파일 끝에 빈 줄을 추가해야 합니다.