파일의 문자열에서 하나 또는 두 개의 숫자 문자를 찾아서 바꿔야 합니다. 이러한 문자열은 다음 형식의 IP 주소입니다.
10.xx.y.z
xx
1자 또는 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 문자열과 전혀 혼동되지 않습니다.