sed c\命令,IP地址和16进制数互相转换等一些精彩shell代码
2010-12-18 14:22
851 查看
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
比如 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
相关文章推荐
- sed c\命令,IP地址和16进制数互相转换等一些精彩shell代码
- 两行Python代码实现IP地址与十进制整数互相转换
- 学到一些shell命令
- PHP中IP地址与整型数字互相转换详解
- shell学习之sed命令补充
- shell脚本学习-5(sed命令学习)
- << 转载>>Shell一些强大的命令
- BASH命令和SHELL脚本总结(10)脚本互相调用篇
- shell命令一些技巧
- shell中sed命令-N选项的理解
- Shell—sed命令
- mysql的一些shell命令
- C#中HTML和UBB互相转换的代码
- Linux: shell 中命令代换 $() 和 ``(有图有代码有真相!!!)
- sed 命令的使用及shell判断语句
- 一些常见的Linux命令与shell语句整理
- [转]shell脚本sed命令
- 一些grep, sed, awk命令的练习题
- Shell基础(四):正则表达式、cut、awk、sed命令
- sed/awk与unix命令等价代码