sed和awk使用教程,附shell脚本案例

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值