sed - 替换IP地址上的第二个八位字节

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sed - 替换IP地址上的第二个八位字节相关的知识,希望对你有一定的参考价值。

我想用sed替换IP地址上的第二个八位字节:

例:

10.110.30.11

10.133.30.11

执行此任务的最简单方法是什么?

谢谢

答案

使用GNU sed:

sed 's/.[0-9]+./.133./' file
另一答案

纯粹bash的尝试,除了精彩的awksed从上面回答。

 $ IFS="." read -r octet1 _ octet3 octet4 <<<"10.110.30.11"
 $ octet2=133
 $ printf "%s.%s.%s.%s
" "$octet1" "$octet2" "$octet3" "$octet4"
 10.133.30.11
另一答案
awk  'BEGIN{FS=OFS="."}{$2=133}1' <<< "10.110.30.11"
10.133.30.11

这会将第二个八位字节的值更改为133.列由在BEGIN块内定义的文字点分隔。

另一答案

如果您的输入是基于列的,我认为awk可以更容易一些。

awk -F'.' -v OFS="." '$2=133'

用你的例子:

$ echo "10.110.30.11" | awk -F'.' -v OFS="." '$2=133'
10.133.30.11
另一答案

做:

sed -E 's/^([^.]+.)[^.]+(.[^.]+.[^.]+$)/11332/'

请注意,匹配IP地址需要在Regex中进行一些工作,或许您应该为您选择的语言寻找特定的库。对于手头的任务,这应该做。

例:

% sed -E 's/^([^.]+.)[^.]+(.[^.]+.[^.]+$)/11332/' <<<'10.110.30.11' 
10.133.30.11
另一答案

使用awk和sub

$ awk 'sub(/.[0-9]{1,3}./,".133.")' <(echo 10.110.30.11)
10.133.30.11
另一答案

这可能适合你(GNU sed):

sed 's/[0-9]+/133/2' file

替换第二个出现的一个或多个数字字符。

以上是关于sed - 替换IP地址上的第二个八位字节的主要内容,如果未能解决你的问题,请参考以下文章

从 IP 地址中分离出最后一个八位字节并将其放入变量中

Android 设备上的 HLS 加密

MAC 多少个字节 是8还是6

IP报文及地址段分析

复制缓冲区中的 IP 地址

ip地址管理与子网划分