sed 和awk 使用教程
可以在命令行状态直接对文件进行修改
常用
-i #直接编辑文本文件
a: #在文档里增加内容
d: #删除
s #替换,替换文档内信息(指定字符)
例句
sed 2a\ yyyy -i /root/test.txt #在/root/test.txt 文件中插入
#在第二行下面插入一条信息yyyy
在某个关键字下一行插入
sed -i '/^ONBOOT/ a\ IPADDR=192.168.3.1' /etc/sysconfig/network-script/eth0
#网络配置文件中的ONBOOT开头的行,下面加入一行IPADDR=192.168.3.1
#匹配的内容正则放在 /中间 /
sed -i '$a\ IPADDR=192.168.3.1' /etc/sysconfig/network-script/eth0
#在文件最低端加如一行,效果类似追加
d和a差不多
前面是行号,也可以匹配删除
-i 修改内容
sed -i 's/server/SERVER/g' /etc/sysconfig/network-script/eth0
sed -i 's/dhcp/static/g' 文件
#将文件中的dhcp改成static
指定行号修改或者查找信息查找
sed -i '/^ONBOOT/ s/no/yes/g' /etc/sysconfig/network-script/eth0
将ONBOOT起始行的no改成yes
改注释
sed -i "s/^UUID/#&/g" xx文件
#查找替换以UUID开头的行替换为#加原始行(多一个#,加注释)
去掉某行注释
sed -i "s/^#UUID/UUID/g" xx文件
#将首行#UUID 替换为UUID,去掉了注释符号
练习
通过用户获得IP地址,验证IP地址合法性,根据IP地址得到子网掩码,然后修改网卡文件,dhcp改成static,ONBOOT=no 改为ONBOOT=yes,加入IPADDR=IP地址,NETMASK=子网掩码,还要注释UUID
重启netmask服务,验证IP地址信息是否正确
记得输出友好信息
#!/bin/bash
echo "这是一个ip地址判断"
read -p "请输入ip地址" IPADDR
echo $IPADDR |grep "[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}$" &>/dev/null
if [ $? -ne 0 ]
then
echo "您输入的ip格式异常,请您输入类似192.168.220.130的ip"
echo "故障退出,请您重新运行脚本"
exit 1
fi
A1=`echo $IPADDR|awk -F . '{print $1}'`
if [ $A1 -ge 224 ]
then
echo "您第一段ip地址异常,请输入0-223之间的数"
echo "故障退出,请您重新运行脚本"
exit 1
fi
A2=`echo $IPADDR|awk -F . '{print $2}'`
if [ $A2 -ge 256 ]
then
echo "您第二段ip地址异常,请输入0-255之间的数"
echo "故障退出,请您重新运行脚本"
exit 1
fi
A3=`echo $IPADDR|awk -F . '{print $3}'`
if [ $A3 -ge 256 ]
then
echo "您第三段ip地址异常,请输入0-255之间的数"
echo "故障退出,请您重新运行脚本"
exit 1
fi
A4=`echo $IPADDR|awk -F . '{print $4}'`
if [ $A4 -ge 256 ]
then
echo "您第四段ip地址异常,请输入0-255之间的数"
echo "故障退出,请您重新运行脚本"
exit 1
fi
echo "您的IP地址$IPADDR 正常请继续使用"
read -p "是否将这个ip设在为固定ip,是否继续y/n" yn
if [ $yn = y ]
then
echo "请稍后,正在解析配配置"
else
echo "谢谢使用,如需要配置请重新运行脚步并输入y"
exit 0
fi
echo "解析ip地址中"
#read -p "请输入一个正确的ip地址" IP
A1=`echo $IPADDR | awk -F . '{print $1}'`
if [ $A1 -ge 1 ] && [ $A1 -le 126 ]
then
NETMASK=255.0.0.0
# echo "这是一个A类地址"
# echo "NETMASK=255.0.0.0"
elif [ $A1 -gt 126 ] && [ $A1 -le 191 ]
then
# echo "这是一个B类地址"
NETMASK=255.255.0.0
# echo "NETMASK=255.255.0.0"
elif [ $A1 -ge 192 ] && [ $A1 -le 223 ]
then
# echo "这是一个C类地址"
NETMASK=255.255.255.0
# echo "NETMASK=255.255.255.0"
else
echo "这是一个其他地址"
echo "请输入一个可用的ip地址0-223开头的"
sleep 2
exit 0
fi
echo "设置中"
cat /etc/sysconfig/network-scripts/ifcfg-eno16777736|grep IPADDR &>/dev/null
if [ $? -eq 0 ]
then
sed -i "/^IPADDR/ s/IPADDR=.*/IPADDR=$IPADDR/g" /etc/sysconfig/network-scripts/ifcfg-eno16777736
# sed -i "/^NETMASK/ a\GATEWAY=$GATEWAY" /etc/sysconfig/network-scripts/ifcfg-eno16777736
else
#GATEWAY=`echo $IPADDR|awk -F . {print $1.,$2.,$3.}254`
GATEWAY=192.168.20.254
DNS1=202.106.0.20
DNS2=114.114.114.114
sed -i "/^ONBOOT/ a\IPADDR=$IPADDR" /etc/sysconfig/network-scripts/ifcfg-eno16777736
sed -i "/^IPADDR/ a\NETMASK=$NETMASK" /etc/sysconfig/network-scripts/ifcfg-eno16777736
sed -i "/^NETMASK/ a\GATEWAY=$GATEWAY" /etc/sysconfig/network-scripts/ifcfg-eno16777736
sed -i "/^NETMASK/ a\DNS1=$DNS1" /etc/sysconfig/network-scripts/ifcfg-eno16777736
sed -i "/^DNS2/ a\DNS1=$DNS2" /etc/sysconfig/network-scripts/ifcfg-eno16777736
sed -i '/^ONBOOT/ s/no/yes/g' /etc/sysconfig/network-scripts/ifcfg-eno16777736
sed -i '/^BOOTPROTO/ s/dhcp/static/g' /etc/sysconfig/network-scripts/ifcfg-eno16777736
sed -i 's/^UUID/#&/g' /etc/sysconfig/network-scripts/ifcfg-eno16777736
fi
echo "设置成功正在重启动网络中"
systemctl stop network
systemctl start network
ifdown ifcfg-eno16777736
ifup ifcfg-eno16777736
read -p "是否测试网络y/n" yynn
if [ $yynn = y ]
then
echo "配置完成,请查看"
ifconfig | grep inet |awk -F " " '{print $2 $4}'
ping www.baidu.com -c 2
if [ $? -eq 0 ]
then
echo "ok,配置正常且可以联网,感谢使用!!!"
else
echo "配置正常,请检查手动网络"
fi
fi