我想使用sed替换IP地址上的第二个八位字节:
示例:
10的 110 .30.11
10的 133 .30.11
执行此任务的最简单方法是什么?
谢谢
答案 0 :(得分:2)
纯粹bash
的尝试,除了上面的精彩awk
和sed
答案。
$ IFS="." read -r octet1 _ octet3 octet4 <<<"10.110.30.11"
$ octet2=133
$ printf "%s.%s.%s.%s\n" "$octet1" "$octet2" "$octet3" "$octet4"
10.133.30.11
答案 1 :(得分:1)
如果您的输入是基于列的,我认为awk可以更容易实现。
awk -F'.' -v OFS="." '$2=133'
以你的例子:
$ echo "10.110.30.11" | awk -F'.' -v OFS="." '$2=133'
10.133.30.11
答案 2 :(得分:1)
awk 'BEGIN{FS=OFS="."}{$2=133}1' <<< "10.110.30.11"
10.133.30.11
这会将第二个八位字节的值更改为133.列由在BEGIN块内定义的文字点分隔。
答案 3 :(得分:0)
使用GNU sed:
sed 's/\.[0-9]\+\./.133./' file
答案 4 :(得分:0)
执行:
sed -E 's/^([^.]+\.)[^.]+(\.[^.]+\.[^.]+$)/\1133\2/'
请注意,匹配IP地址需要在Regex中进行一些工作,或许您应该为您选择的语言寻找特定的库。对于手头的任务,应该这样做。
示例:强>
% sed -E 's/^([^.]+\.)[^.]+(\.[^.]+\.[^.]+$)/\1133\2/' <<<'10.110.30.11'
10.133.30.11
答案 5 :(得分:0)
使用awk和sub
:
$ awk 'sub(/\.[0-9]{1,3}\./,".133.")' <(echo 10.110.30.11)
10.133.30.11
答案 6 :(得分:0)
这可能适合你(GNU sed):
sed 's/[0-9]\+/133/2' file
替换第二次出现的一个或多个数字字符。