使用 sed 替换 IP 地址字符串中间的任意字符

使用 sed 替换 IP 地址字符串中间的任意字符

我需要查找并替换文件中字符串中的一个或两个数字字符。这些字符串是以下形式的 IP 地址:

10.xx.y.z 

其中xx可以是一两个字符。

我想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 位,也不将最后一个八位字节限制为三位数字,但它可能已经足够好了。

如果您想就地编辑文件,最好的这样做的方法(而不是使用通常危险的-i开关 forperl或 some seds)是首先获取文件的临时副本,对其进行编辑,然后将编辑后的临时副本写回原始文件。大多数贝壳(包括bashzsh当您请求此处文档时,将自动为您提供一个安全的临时文件:

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

以上将删除所有尾随空白行infile如果有的话,但本网站上还有许多其他答案,这些答案也演示了如何保存这些答案(如果您需要的话)。它也不处理空字节,如果没有zsh.

答案2

假设(如指定)文件由字符串组成,并且字符串是知识产权

每条线路 1 个 IP

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 字符串混淆。

相关内容