sed c\命令,IP地址和16进制数互相转换等一些精彩shell代码

本文介绍了SED命令中的c命令用法,包括如何替换文本行,并解释了解引用过程。此外,还提供了IP地址与十六进制相互转换的Shell脚本函数,以及比较IP地址大小的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 首先是sed中的c\命令,这个命令和s/xxx/xxxx/g不同的是,使用c\能把当前sed查找到的一行全部替换成我们指定的TEXT 

比如 sed -i "/734/c\Hello" install.log ,这样就把包含有734这样字符串的整个一行替换成了Hello 

在使用c\的时候需要注意,如果我们在c\命令后面加的不是一个常数字符串,而是一个变量,那么,要再加一个\符号来解引用,否则变量无法正常解析: 

sed -i "/734/c\$Hello" install.log -- 含有734的一行被替换成了$Hello 

sed -i "/734/c\\$Hello" install.log -- 含有734的一行被替换成了Hello变量中的值 

2. 几个不错的函数,分别是ip转成十六进制,十六进数字转成IP地址,判断两个IP的大小,在一堆IP地址中找出最小的IP和最大的IP,这里面都用到了一个命令printf,这个东西还不错,可以用来格式化输出,下面代码中出现的printf "%08X" ...... 表示将后面的内容格式化成十六进制数,最多保留8位 
iptohex() {
    IFS
=.
    
for  str in $ 1
    
do
        
printf   " %02X "   $str
    done
}

hextoip() {
    
hex = $ 1
    
printf   " %d. "  0x${ hex : 0 : 2 }
    
printf   " %d. "  0x${ hex : 2 : 2 }
    
printf   " %d. "  0x${ hex : 4 : 2 }
    
printf   " %d "  0x${ hex : 6 : 2 }
}

iplarger() {
    first
= 0x$(iptohex $ 1 )
    second
= 0x$(iptohex $ 2 )
    first
= $( printf   " %d "   $first )
    second
= $( printf   " %d "   $second )
    
if  [  $first   - gt  $second  ];then
        
return   0
    
else
        
return   1
    fi
}

ipsmaller() {
    first
= 0x$(iptohex $ 1 )
    second
= 0x$(iptohex $ 2 )
    first
= $( printf   " %d "   $first )
    second
= $( printf   " %d "   $second )
    
if  [  $first   - lt  $second  ];then
        
return   0
    
else
        
return   1
    fi
}

 

 

 在一堆IP地址中找出最小的和最大的IP(IPADDRESS是一个数组):

 

ip_low = ${IPADDRESS[ 1 ]}
ip_high
= $ip_low
for  ipnow in ${IPADDRESS[@]}
do
    
if  ismasked  $ipnow   $localip   $localmask
    then
        
if  ipsmaller  $ipnow   $ip_low
        then
            ip_low
= $ipnow
        fi
        
if  iplarger  $ipnow   $ip_high
        then
            ip_high
= $ipnow
        fi
    
else
        echo IPs not mask
        
exit
    fi
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值