您的位置:首页 > 运维架构 > Shell

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

2011-09-19 01:16 609 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: