2011-09-19 wcdj
问题描述:
如何使用shell脚本删除samba的配置文件中的一个用户子项?samba的配置文件信息如下所示:
[global]
workgroup = MYGROUP
security = user
[user1]
path = /home/user1
public = no
writeable = yes
browseable = yes
valid users = user1
[user2]
path = /home/user2
public = no
writeable = yes
browseable = yes
valid users = user2
[user3]
path = /home/user3
public = no
writeable = yes
browseable = yes
valid users = user3
方法1:(只能删除固定行)
./test.sh samba.old user2 删除user2这部分,新的配置在samba.new中。
#!/bin/sh
beg=`grep "$2" -n $1 | cut -d":" -f1 | head -1`
# beg=`grep "$2" -n $1 | cut -d":" -f1 | sed q`
((end=beg+5))
sed ''$beg','$end'd' $1 > samba.new
注意:在sed里使用变量的几种方法:
(1) sed ''$beg','$end'd' $1 > samba.new 对变量$var再加一对单引号,sed最外层是一对单引号
(2) sed "${beg},${end}d" $1 > samba.new 双引号会解释${var},sed最外层是一对双引号
方法2:(可以删除任意行,比较灵活)
#!/bin/sh
# usage: ./xxx.sh samba.old keyword
# $1=samba.old
# $2=keyword
awk -v var=$2 'BEGIN{ RS=""; ORS="\n\n\n\n" } { if($1 !~ var) print; }' $1
参考:
shell文本删除问题
http://topic.csdn.net/u/20110918/21/d83546a1-1e47-487b-ac1d-9b03baa54937.html
sed学习笔记
http://www.tsnc.edu.cn/default/tsnc_wgrj/doc/sed.htm