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
的尝试,除了精彩的awk
和sed
从上面回答。
$ 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地址上的第二个八位字节的主要内容,如果未能解决你的问题,请参考以下文章