일치하는 줄의 문자 바꾸기

일치하는 줄의 문자 바꾸기

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

관련 정보