sed를 사용하여 IP 주소 문자열 중간에 있는 문자를 바꾸세요.

sed를 사용하여 IP 주소 문자열 중간에 있는 문자를 바꾸세요.

파일의 문자열에서 하나 또는 두 개의 숫자 문자를 찾아서 바꿔야 합니다. 이러한 문자열은 다음 형식의 IP 주소입니다.

10.xx.y.z 

xx1자 또는 2자일 수 있습니다 .

xx단일 문자로 바꾸고 싶기 0때문에

10.0.y.z 

y합계 값을 유지합니다 z.

이 문자열은 파일에 여러 번 나타날 수 있습니다. sed이를 수행하라는 요청은 무엇입니까?

답변1

n=[:digit:] o="[$n]\{1,3\}\."

sed -e"s/^/ /" \
    -e"s/\([^.$n]$o\)$o\($o${o%.})/\10.\2/g" \
    -e"s/.//" \
<in >out

옥텟을 8비트로 제한하지 않으며 마지막 옥텟을 3자리로 제한하지도 않지만 아마도 충분할 것입니다.

파일을 그 자리에서 편집하려면,최고이것을 하는 방법-i(일반적 으로 위험한 스위치를 perl또는 일부 에 사용하는 대신 sed)먼저 파일의 임시 복사본을 가져와 편집한 다음 편집된 임시 복사본을 원본 파일에 다시 쓰는 것입니다. 대부분의 껍질( bash및 포함 zsh)여기에서 문서를 요청하면 보안 임시 파일이 자동으로 제공됩니다.

sed -e"#...script..." \
<<IN  >infile
$(cat <infile)
IN

위의 내용은 모든 후행 빈 줄을 제거합니다.infile그렇다면 이 사이트에는 필요한 경우 이를 저장하는 방법을 보여주는 다른 답변도 많이 있습니다. 또한 null 바이트가 없으면 처리하지 않습니다 zsh.

답변2

(지정된 대로) 파일이 문자열로 구성되어 있고 문자열이 다음과 같다고 가정합니다.지적 재산권

줄당 IP 1개

sed 's/.[^.]*/0/' YourFile

한 줄에 여러 IP

sed 's/\([0-9]\{1,3\}[.]\)[^.]*\(\([.][[:alnum:]]\{1,\}\)\{2\}\)/\1.0\2/g' YourFile

답변3

이것은 작동합니다:

o="[[:digit:]]\{1,3\}"  
sed  -e"s/10\.$o\.\($o\.$o\)/10.0.\1/g" <input.txt >output.txt

파일의 어느 곳에서나 같은 줄에서 여러 번이라도 10.Xyz를 10.0.yz로 변경합니다. 임의의 WWW.xyz 문자열과 전혀 혼동되지 않습니다.

관련 정보