1把Windows换行符替换成UNIX换行符:
去掉windows下的回车符 (注意^M 在linux 下写法 按^M 是回车换行符,输入方法是按住CTRL+v,松开v,按m)
sed -i ’s/^M//g’ df.txt
去掉windows下的回车符 (注意^M 在linux 下写法 按^M 是回车换行符,输入方法是按住CTRL+v,松开v,按m)
sed -e ’s/^M//g’ df.txt >cwm.txt
或者用
sed -e ’s/^M$//g’ df.txt >cwm.txt $代表行尾
2获取当前系统时间:
datetime=`date "+%Y-%m-%d %H:%M:%S"`
3 sed脚本删除、添加一行:
sed -i '1d' file #delete first line
sed -i '$d' file #delete last line
var1=123
sed -i "2i${var1}" file
上面介绍了sed的一些基础使用方法,下面就我实际遇到的一个问题来实战一下!
现在需要在kernel启动后解析kernel的commandline,来获取需要设置的ip netmask等网络参数。
首先查看/proc/cmdline,如下:
console=ttyS0,115200 rdinit=/sbin/init ipaddr=10.0.14.143 netmask=255.255.255.252 gw=10.0.12.1
当然可以写个程序,进行字符串分析,这是最保守的方法,也是最笨的方法。。。需要自己去写字符串分析。
还是要用最简单的方法来解决问题才好。
在脚本中用sed实现如下:
- #!/bin/bash
- ip=`sed -n 's/ /\n/gp' /proc/cmdline | sed -n '/ipaddr/p' | sed -n 's/ipaddr=//gp'`
- netmask=`sed -n 's/ /\n/gp' /proc/cmdline | sed -n '/netmask/p' | sed -n 's/netmask=//gp'`
- gw=`sed -n 's/ /\n/gp' /proc/cmdline | sed -n '/gw/p' | sed -n 's/gw=//gp'`
- if [ "$ip" != "" -a "$netmask" != "" ]; then
- ifconfig eth0 $ip netmask $netmask
- fi
- if [ "$gw" != "" ]; then
- route add default gw $gw
- fi
#!/bin/bash
ip=`sed -n 's/ /\n/gp' /proc/cmdline | sed -n '/ipaddr/p' | sed -n 's/ipaddr=//gp'`
netmask=`sed -n 's/ /\n/gp' /proc/cmdline | sed -n '/netmask/p' | sed -n 's/netmask=//gp'`
gw=`sed -n 's/ /\n/gp' /proc/cmdline | sed -n '/gw/p' | sed -n 's/gw=//gp'`
if [ "$ip" != "" -a "$netmask" != "" ]; then
ifconfig eth0 $ip netmask $netmask
fi
if [ "$gw" != "" ]; then
route add default gw $gw
fi
这个脚本就可以实现ipaddr netmask gw字符串的提取,以及使用。