免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 3043 | 回复: 23
打印 上一主题 下一主题

如何加行的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-17 17:27 |只看该作者 |倒序浏览
我现在有一个ldif文件
dn: uid=a,o=aa.bb.cc ............................
maillist y
dn: uid=b ,o=aa.bb.cc...............
maillist y
.........
但有这样的行
dn: uid=e,o=aa.bb.cc ............................
dn: uid=f,o=aa.bb.cc ............................
我需要对这样的行处理就是说在后面没有maillist y的下面加一行maillist y

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-12-17 17:35 |只看该作者

如何加行的问题

试试这样?

  1. sed 's/dn.*/&\nmaillist y/g' file|grep -A1 dn|grep -v ^-
复制代码
/home/lee/test#cat file
dn: uid=a,o=aa.bb.cc ............................
maillist y
dn: uid=b ,o=aa.bb.cc...............
maillist y
dn: uid=a,o=aa.bb.cc ....
dn: uid=a,o=aa.bb.cc ....
dn: uid=a,o=aa.bb.cc ....
结果:
/home/lee/test#sed 's/dn.*/&\nmaillist y/g' file|grep -A1 dn|grep -v ^-
dn: uid=a,o=aa.bb.cc ............................
maillist y
dn: uid=b ,o=aa.bb.cc...............
maillist y
dn: uid=a,o=aa.bb.cc ....
maillist y
dn: uid=a,o=aa.bb.cc ....
maillist y
dn: uid=a,o=aa.bb.cc ....
maillist y

P.S:笨了点  
yeniu 该用户已被删除
3 [报告]
发表于 2004-12-17 17:37 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2004-12-17 17:53 |只看该作者

如何加行的问题

请问具体如何生成 code中间的file是文件名吗?

论坛徽章:
0
5 [报告]
发表于 2004-12-17 18:00 |只看该作者

如何加行的问题

sed 's/dn.*/&\nmaillist y/g' 原来的文件名|grep -A1 dn|grep -v ^-
好象不可以
我要是原来有maillist的还有,补充说一下maillist可能是n
就是说原来的要保留,但dn:..........................................下面没有maillist的要加一个新的行maillist y

论坛徽章:
0
6 [报告]
发表于 2004-12-17 20:27 |只看该作者

如何加行的问题

cat > file
dn: uid=a,o=aa.bb.cc ............................
maillist y
dn: uid=b ,o=aa.bb.cc...............
maillist y
dn: uid=a,o=aa.bb.cc ....
dn: uid=a,o=aa.bb.cc ....
dn: uid=a,o=aa.bb.cc ....




[root@proxy2 ldap]# sed 's/dn.*/&\nmaillist y/g' file|grep -A1 dn|grep -v ^-
dn: uid=a,o=aa.bb.cc ............................ nmaillist y
maillist y
dn: uid=b ,o=aa.bb.cc............... nmaillist y
maillist y
dn: uid=a,o=aa.bb.cc .... nmaillist y
dn: uid=a,o=aa.bb.cc .... nmaillist y
dn: uid=a,o=aa.bb.cc .... nmaillist y

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
7 [报告]
发表于 2004-12-18 01:00 |只看该作者

如何加行的问题

我的环境测试通过~~~,也许是你的sed版本的问题吧~
P.S:我的环境见签名

论坛徽章:
0
8 [报告]
发表于 2004-12-18 01:23 |只看该作者

如何加行的问题

awk '/dn/ { print; print "maillist y" }'  file

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
9 [报告]
发表于 2004-12-18 08:32 |只看该作者

如何加行的问题

  1. sed '/^maillist y$/d
  2. a \
  3. maillist y
  4. ' file
复制代码

论坛徽章:
0
10 [报告]
发表于 2004-12-18 19:24 |只看该作者

如何加行的问题

楼上两位也没看到
"补充说一下maillist可能是n"
这句吧

按你们的做法maillist n会被改成maillist y

写了个长点的,惭愧,不知道有没有方便点的

读到maillist行不改变,读到dn行检查下个记录是不是maillist,不是添加
,是不动
  1. #!/bin/bash
  2. awk '
  3. BEGIN { i=1 }
  4. {
  5.         array[i]=$0
  6.         i++
  7.         next
  8. }
  9. END {
  10.         for ( j=1; j<=i; j++ ) {
  11.                 if ( index( array[j],"dn" ) != 0 ) {
  12.                         if ( index( array[j+1], "maillist" ) == 0 ) {
  13.                                 print array[j]
  14.                                 print "maillist y"
  15.                         }
  16.                         else {
  17.                                 print array[j]
  18.                         }
  19.                 }
  20.                 else {
  21.                         print array[j]
  22.                 }
  23.         }
  24. }' $*
复制代码



TEST
  1. [root@bbhome test]# cat file
  2. dn: uid=a,o=aa.bb.cc ............................
  3. maillist y
  4. dn: uid=b ,o=aa.bb.cc...............
  5. maillist n
  6. dn: uid=c,o=aa.bb.cc ............................
  7. dn: uid=d,o=aa.bb.cc ............................
  8. maillist n
  9. dn: uid=e,o=aa.bb.cc ............................
  10. dn: uid=g,o=aa.bb.cc ............................
  11. dn: uid=h,o=aa.bb.cc ...........................



  12. [root@bbhome test]# temp2 file
  13. dn: uid=a,o=aa.bb.cc ............................
  14. maillist y
  15. dn: uid=b ,o=aa.bb.cc...............
  16. maillist n
  17. dn: uid=c,o=aa.bb.cc ............................
  18. maillist y
  19. dn: uid=d,o=aa.bb.cc ............................
  20. maillist n
  21. dn: uid=e,o=aa.bb.cc ............................
  22. maillist y
  23. dn: uid=g,o=aa.bb.cc ............................
  24. maillist y
  25. dn: uid=h,o=aa.bb.cc ...........................
  26. maillist y
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP