linux sed命令 + 高级SED 操作配置文件

http://www.360doc.com/content/12/0209/14/8739082_185278180.shtml
上面的网址也有SED的 例子用法,更全

http://wenku.baidu.com/link?url=Ci_Bdi8nI4NbuEUPkHqGDVUyWBlJZT8I_Vq10gmAfIkO_A1ClWu2wFq7qb0vgOdsDXsLiNKLUpqk5K8Ja2GyytWD5bKD3NBVffxS37DDGo7
上面是    s​e​d​_​使​用​手​册  包括如何删除配置文件中的#操作等


1。 替换
让我们看一下 sed 最有用的命令之一,替换命令。使用该命令,可以将特定字符串或匹配的规则表达式用另一个字符串替换。下面是该命令最基本用法的示例:
?
$ sed -e 's/foo/bar/' myfile.txt
?
上 面的命令将 myfile.txt 中每行第一次出现的 'foo'(如果有的话)用字符串 'bar' 替换,然后将该文件内容输出到标准输出。请注意,我说的是每行第一次出现,尽管这通常不是您想要的。在进行字符串替换时,通常想执行全局替换。也就是说, 要替换每行中的所有出现,如下所示:
?
$ sed -e 's/foo/bar/g' myfile.txt
?
在最后一个斜杠之后附加的 'g' 选项告诉 sed 执行全局替换。
?
关于 's///' 替换命令,还有其它几件要了解的事。首先,它是一个命令,并且只是一个命令,在所有上例中都没有指定地址。这意味着,'s///' 还可以与地址一起使用来控制要将命令应用到哪些行,如下所示:
?
$ sed -e '1,10s/enchantment/entrapment/g' myfile2.txt
?
上例将导致用短语 'entrapment' 替换所有出现的短语 'enchantment',但是只在第一到第十行(包括这两行)上这样做。
?
$ sed -e '/^$/,/^END/s/hills/mountains/g' myfile3.txt
?
该例将用 'mountains' 替换 'hills',但是,只从空行开始,到以三个字符 'END' 开始的行结束(包括这两行)的文本块上这样做。
?
关于 's///' 命令的另一个妙处是 '/' 分隔符有许多替换选项。如果正在执行字符串替换,并且规则表达式或替换字符串中有许多斜杠,则可以通过在 's' 之后指定一个不同的字符来更改分隔符。例如,下例将把所有出现的 /usr/local 替换成 /usr:
?
$ sed -e 's:/usr/local:/usr:g' mylist.txt
?
在该例中,使用冒号作为分隔符。如果不指定分隔符,则变成了如下:


$RUN_NAME="201302016stg02stability11";
sed -i 's/RUN_NAME=.*;/RUN_NAME="201302016stg02stability";/g' cap_stability_02.pl

sed.sh file
time=`date +%Y%m%d%H%M%S`
sed -i 's/RUN_NAME=.*;/RUN_NAME="'$time'stg02performance";/g'  cap_stg02_perf.pl

############################################################
sed的一般使用方法网上很多,所以这里只说说我遇到的使用变量的情况


变量中不包含特殊字符时,可以通过下面几种方法来达到使用变量的目的:

1、将平常的单引号改为双引号(Shell里单引号中所有字符都作字面解释):

       sed “s/mytext/$var/g” file

2、将一个单引号改为两个:

      sed ‘s/mytext/’$var’/g’ file 或者 sed 's/'"$val"'//' urfile

      第一个可以理解成‘s/mytext/’和’/g’ 两部分,中间的$var因为没有'去掉其特殊意思,所以带到了使用变量的目的; 第二个最里面是",中间和最外层是',其实和第一个原理是一样的,只是我认为比第一个要安全些。其实还有很多,可以参考十三问。

3、使用eval,如:

       eval sed 's/$a/$b/' filename


变量中包含特殊字符时:

        我遇到的情况是路径字符 '/',比如处理PATH变量时, 可以将sed的/用#替代

        比如:

  sed "s#$a#$b#"

##############################################################


2 删除
(1) sed -e '1d' inputfile (删除第一行)
那么删除第x行呢?删除第x1,x2,x3行呢?
sed -e 'xd' inputfile
sed -e 'x1d' -e 'x2d' -e 'x3d' inputfile
当然也许还有更好的办法。

(2) sed -e '1,3d' file (删除第一到第三行)
思考:删除第n行到第m行?也就是
sed -e 'n,md' file
删除第一行到最后一行
sed -e '1,$d' file     #$ 最后一行和一行的最后

(3) sed -e '/#/d' file  (删除含有'#'号的行)
思考:删除含有字母xx的行
sed -e '/xx/d' file
思考: 删除除含有字符串xx的所有行
sed -e '/xx/!d' file

(4) sed -e '/word1/, /word2/d' file  (删除从含有单词word1到含有单词word2的行)
sed -e '10,/word1/d' file
删除文件中从第10行到含有word1的行
sed -e '/word1/,10/d' file
和上面的匹配相反,删除从含有word1的行到第10行

(5) sed -e '/t.*t/d' file     (删除含有两个t的行)
思考:删除含有指定正在表达式匹配的行。

3 文本的打印: p
基本格式:
[address1,[address2]] p

    (1) sed -e '/then/ p' filename  #打印所有行并重复打印含有then 的行
(2) sed -n '/then/ p' filename  #只打印含有then的行
(3) sed -e '1,3 p' filename     # 打印所有行并重复1-3行
(4) sed -n '1,3 p' filename     # 打印1-3行
(5) sed -n '/if/,/fi/ p' filename #打印字符if和fi之间的内容

    p函数为sed的打印函数,在这里要注意-e 和-n 参数的区别。一般使用-n参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值