Chinaunix首页 | 论坛 | 博客
  • 博客访问: 123421
  • 博文数量: 34
  • 博客积分: 1201
  • 博客等级: 少尉
  • 技术积分: 365
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-21 08:56
文章分类

全部博文(34)

文章存档

2012年(1)

2011年(15)

2010年(18)

我的朋友

分类: LINUX

2011-10-25 12:51:13

#cat httpd.conf
LoadModule access_module modules/mod_access.so
LoadModule auth_module modules/mod_auth.so
LoadModule auth_anon_module modules/mod_auth_anon.so
LoadModule auth_dbm_module modules/mod_auth_dbm.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule file_cache_module modules/mod_file_cache.so
LoadModule cache_module modules/mod_cache.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule auth_ldap_module modules/mod_auth_ldap.so
 
只输出匹配LoadModule的第一行:
#sed -n '/LoadModule/{p;q}' httpd.conf
LoadModule access_module modules/mod_access.so
只输出匹配LoadModule的最后一行:
#sed -n '/^LoadModule/h;${x;p}' httpd.conf
LoadModule auth_ldap_module modules/mod_auth_ldap.so
 
我想在找到最后一个匹配的字符后插入一行字符
#cat test.sh
#!/bin/bash
n=`sed -n '/^LoadModule/h;${x;p}' httpd.conf|awk '{print $2}'`
sed "/${n}/ httpd.conf This is just a test" httpd.conf
 
[解析]
  这个要求稍微难一点,把匹配LoadModule的内容一直覆盖拷贝到缓冲空间中,注意是h,H是追加,不明白?再看看sed手册。这样sed一直读到最后一行,这时候遍历全文本只要是匹配LoadModule的内容就覆盖了缓冲空间,那肯定缓冲空间里是最后一个LoadModule行的内容,这时候x把模式空间和缓冲空间的内容交换,再打印输出即为最后一样匹配的内容了。

再附上awk的效果:

$ awk '!a[$1]++' httpd.conf
LoadModule access_module modules/mod_access.so

$ awk '/^LoadModule/{i=$0}END{print i}' httpd.conf
LoadModule auth_ldap_module modules/mod_auth_ldap.so


[解析]
  如果阁下一直关注我的博客的话,聪明的您一定已经明白其中的奥秘了。
阅读(10821) | 评论(0) | 转发(0) |
0

上一篇:SED单行脚本快速参考

下一篇:计算流量

给主人留下些什么吧!~~