shell删除文本技巧 —— grep, cut, head, sed, awk

7 篇文章 0 订阅
4 篇文章 1 订阅

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值