Chinaunix首页 | 论坛 | 博客
  • 博客访问: 226381
  • 博文数量: 57
  • 博客积分: 955
  • 博客等级: 准尉
  • 技术积分: 587
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-14 13:30
文章分类

全部博文(57)

文章存档

2012年(2)

2011年(55)

分类: LINUX

2011-04-30 23:13:16

 seddebug_tools.txt   我是booduklee,还未正式踏足linux的职业生涯,目前在校生,大三,
五一的假期如此的无聊,今天没事就来晒下我对sed的一些理解
当然在用sed之前用不好正则表达式是不行的,这里正则表达式我就不说了。

sed首先是对行做操作的,但是不会对文件有真实的改变,他首先会将你要操作的文件读入内存中来进行操作,sed默认是输出文件所有行的,为了关闭默认输出而得到我们想要的答案,就要加上-n参数

接下来我用一些实例来说毕竟这个靠文字没办法表达清楚,
1, 我要输出一个文件的前两行

可以看到清晰的输出了前两行,当然要加上-n的参数
2 输出后两行或者是输出第四行至最后一行这就要涉及一些技巧了
那个$就表示最后一行的意思
3,替换
替换的一个技巧,可以用&来代替你所想匹配的字符
4,关于sed定位的方法可以是行号正则,正则定位,和行号定位

5,在匹配行下读入文本以及保存,插入,替换条件行
sed '/匹配字符/(r,a,c,w)  插入的内容或者文件名'      filename
6,对符合条件的行不处理,直接对下一行做操作
我保持输出奇数行
这里边有个有用的参数就是n,表示跳过这行,直接对下一行做操作,因为我没有用正则匹配从第一行开始
同时会把第二行装入hold空间,所以第二行跳过,这个回头我给大家一个调试的工具,可以清晰的看到在用sed的过程中的一个hold和patt空间的每一行的详细装入匹配过程
8,用y来进行单个字符顺序匹配替换
9,不想对所有行做操作,处理几行之后推出,当然你也可以限定对1,5行做操作
看个人习惯了
10 sed多动作用-e来实现结合上个例子,大家可以看情况用管道还是-e来操作
11,{}可以对符合条件的执行多个动作,用分号隔开
最后还有些高级一点的技巧涉及到直接对hold和patt的操作个人认为实际意义不大,不过对大牛来说就很必要,呵呵,
很难讲的清楚,
还有一个参数差点忘了,可以直接对配置文件进行更改,用-i参数就行,用-i.bak会先备份一个*.bak的文件才更改,下边有一个我写的对apache的配置文件写一个虚拟主机
#!/bin/bash
#written by booduklee
#2011-04-29
httpd=/etc/httpd/conf/httpd.conf
export httpd
if [ -f $httpd ]
then
sed -i.bak '991a NameVirtualHost *:80' $httpd
sed -i  '992a ' $httpd
sed -i '993a ServerAdmin booduklee@gmail.com' $httpd
sed -i '994a ServerName ' $httpd
sed -i '995a DocumentRoot /var/www/html' $httpd
sed -i '996a ' $httpd
fi

最后不早了。晚安,呵呵,各位五一快乐
PS:附件附上sed的debug工具,用法是sedsed -d 's/123/456/' filename

阅读(1577) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~