ip가 포함된 문자가 있습니다. 나는 바꾸고 싶다모든 숫자ip에는 "SpecialWord" 뒤에 다른 문자가 없습니다. 각 회선에는 여러 개의 IP가 있을 수 있습니다.
예를 들어,
이 입력은 사용해 보았지만
*random text with different numbers* 255.43.23.8 *some more text* "SpecialWord" 32.123.21.44 *text again*
IP 의 정확한 자릿수를 모르고 sed가 미리보기를 수행할 수 없음을 의미합니다. 여기에 나에게 도움이 될 만한 것이 있나요?
*random text with different numbers* aaa.aa.aa.a *some more text* "SpecialWord" 32.123.21.44 *text again*
sed -r 's/([0-9]{1,3}\.){3}[0-9]{1,3}/.../g'
답변1
정규 표현식이 패턴의 길이를 기억할 수 있는지 확신할 수 없으므로 순수(부분) sed 솔루션의 경우:
편집하다:
이것은 약간 까다롭습니다.
나는 sed 파일 a.sed를 생각해 냈습니다.
p
s/[0-9]\.[0-9]/a.a/g
s/with/phase 1/
p
s/[0-9]a\.a/aa.a/g
s/a\.a[0-9]/a.aa/g
s/phase 1/phase 2/
p
s/[0-9]aa.a/aaa.a/g
s/a.aa[0-9]/a.aaa/g
s/phase 2/final/
이는 기본적으로 명령줄과 동일하지만 디버그 줄을 사용합니다.
- 첫 번째 줄( - 첫 번째 줄은 다음과 같습니다
1.2
(a.a
텍스트의 숫자에 유의하세요. 예1.12%
:a.a2%
) - 다음 줄에서는 2자리 및 3자리 IP를 구축합니다. )가 됩니다
1.2
(a.a
텍스트의 숫자를 참고하세요. 예를 들어1.12%
will이 됩니다a.a2%
). - 다음 몇 줄은 2자리 및 3자리 IP입니다.
p
삭제 후 라인 확인 후s/phase x/../
사용
sed -f a.sed u
어디에 u
있습니까(예, 유효한 IP는 아니지만 그게 요점도 아닙니다)
*random text with different numbers* 255.43.23.8 *some more text* "SpecialWord" 32.123.21.44 *text again*
*random text with different 12* 255.4.2.8 *some more text* "SpecialWord" 32.12.21.44 *text again*
*random text with different 13* 255.453.263.788 *some more text* "SpecialWord" 2.123.21.454 *text again*
*random text with different 1.12%* 255.43.23.8 *some more text* "SpecialWord" 32.123.21.44 *text again*
*random text with different numbers* 5.43.23.8 *some more text* "SpecialWord" 32.3.1.44 *text again*
이로 인해
*random text final different numbers* aaa.aa.aa.a *some more text* "SpecialWord" aa.aaa.aa.aa *text again*
*random text final different 12* aaa.a.a.a *some more text* "SpecialWord" aa.aa.aa.aa *text again*
*random text final different 13* aaa.aaa.aaa.aaa *some more text* "SpecialWord" a.aaa.aa.aaa *text again*
*random text final different a.aa%* aaa.aa.aa.a *some more text* "SpecialWord" aa.aaa.aa.aa *text again*
*random text final different numbers* a.aa.aa.a *some more text* "SpecialWord" aa.a.a.aa *text again*
편집 2: 임시파일 여유가 있는 경우
grep -Eo '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' u > v
IP 목록 가져오기v
sed s/[0-9]/a/g v > w
익명 IP로 이동w
paste -d '/' v w | sed -e 's|^.*$|s/&/|'
IP를 익명 IP로 변환하는 sed 파일을 생성합니다...
paste -d '/' v w | sed -e 's|^.*$|s/&/|' | sed -f - u
...파일에 적용됩니다.
1.12%선을 제외하면 결과는 위와 동일합니다.
*random text with different 1.12%* aaa.aa.aa.a *some more text* "SpecialWord" aa.aaa.aa.aa *text again*
임시 파일이 있고 크루즈 미사일로 토끼를 죽이고 싶다고 가정해 보겠습니다.
답변2
무조건 IP 교체는 다음과 같은 방법으로 수행할 수 있습니다.
perl -pe 's!(\d+(\.\d+){3})! $1 =~s/\d/a/gr !ge'
설명: IP를 다음의 결과로 바꿉니다(숫자를 "a"로 바꿈).
"SpecialWord" 이후의 IP를 보호하려면 IP에 "#"을 표시하고 마지막에 제거하세요.
perl -pe 's/"SpecialWord"\s*\d+/$&#/;
.....
s/#//'
모든 것을 한 번에:
perl -pe 's/"SpecialWord"\s*\d+/$&#/;
s!(\d+(\.\d+){3})! $1 =~s/\d/a/gr !ge;
s/#//' file