免费注册 查看新帖 |

Chinaunix

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

谁能讲讲gensub的\n用法啊 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-27 22:42 |只看该作者 |倒序浏览
一直想弄明白gensub(/xx/,"\\n",1,$1)中\n这个用法的意思

  1. [root@Mylinux tmp]# echo "abc||abc123 123abc xyz123" | awk '{print gensub(/abc/,"\\0",1,$1)}'
  2. abc||abc123
  3. [root@Mylinux tmp]# echo "abc||abc123 123abc xyz123" | awk '{print gensub(/abc/,"\\2",1,$1)}'
  4. ||abc123
  5. [root@Mylinux tmp]# echo "abc||abc123 123abc xyz123" | awk '{print gensub(/abc/,"\\3",1,$1)}'
  6. ||abc123
复制代码


试到\4,出现了惊奇一幕
  1. [root@Mylinux tmp]# echo "abc||abc123 123abc xyz123" | awk '{print gensub(/abc/,"\\4",1,$1)}'
  2. *** glibc detected *** awk: malloc(): memory corruption: 0x08099f10 ***
  3. ======= Backtrace: =========
  4. /lib/libc.so.6[0xb7e31e36]
  5. /lib/libc.so.6(__libc_malloc+0x90)[0xb7e337c0]
  6. /lib/libc.so.6[0xb7def93a]
  7. /lib/libc.so.6[0xb7dedd6f]
  8. /lib/libc.so.6[0xb7ded73e]
  9. /lib/libc.so.6(dcgettext+0x43)[0xb7dec7c3]
  10. awk[0x806e474]
  11. [0xb7f64420]
  12. awk(do_gensub+0x285)[0x8058a25]
  13. awk(r_tree_eval+0x397)[0x8081c47]
  14. awk(do_print+0x109)[0x805aec9]
  15. awk(interpret+0x453)[0x8080233]
  16. awk(interpret+0x1a0)[0x807ff80]
  17. awk(do_input+0x44)[0x806d3d4]
  18. awk(main+0x10ff)[0x806f5bf]
  19. /lib/libc.so.6(__libc_start_main+0xe0)[0xb7ddf0c0]
  20. awk[0x804c9a1]
  21. ======= Memory map: ========
  22. 08048000-08090000 r-xp 00000000 03:01 704528     /bin/gawk
  23. 08090000-08091000 rw-p 00048000 03:01 704528     /bin/gawk
  24. 08091000-080b7000 rw-p 08091000 00:00 0          [heap]
  25. b7900000-b7921000 rw-p b7900000 00:00 0
  26. b7921000-b7a00000 ---p b7921000 00:00 0
  27. b7a4b000-b7a55000 r-xp 00000000 03:01 786438     /lib/libgcc_s-4.2.1-20060612.so.1
  28. b7a55000-b7a56000 rw-p 00009000 03:01 786438     /lib/libgcc_s-4.2.1-20060612.so.1
  29. b7a6c000-b7a73000 r--s 00000000 03:01 1388963    /usr/lib/gconv/gconv-modules.cache
  30. b7a73000-b7b88000 r--p 03a4f000 03:01 1385071    /usr/lib/locale/locale-archive
  31. b7b88000-b7bc8000 r--p 01a14000 03:01 1385071    /usr/lib/locale/locale-archive
  32. b7bc8000-b7dc8000 r--p 00000000 03:01 1385071    /usr/lib/locale/locale-archive
  33. b7dc8000-b7dc9000 rw-p b7dc8000 00:00 0
  34. b7dc9000-b7f1a000 r-xp 00000000 03:01 786461     /lib/libc-2.6.so
  35. b7f1a000-b7f1c000 r--p 00151000 03:01 786461     /lib/libc-2.6.so
  36. b7f1c000-b7f1d000 rw-p 00153000 03:01 786461     /lib/libc-2.6.so
  37. b7f1d000-b7f20000 rw-p b7f1d000 00:00 0
  38. b7f20000-b7f46000 r-xp 00000000 03:01 786469     /lib/libm-2.6.so
  39. b7f46000-b7f47000 r--p 00025000 03:01 786469     /lib/libm-2.6.so
  40. b7f47000-b7f48000 rw-p 00026000 03:01 786469     /lib/libm-2.6.so
  41. b7f48000-b7f4b000 r-xp 00000000 03:01 786467     /lib/libdl-2.6.so
  42. b7f4b000-b7f4c000 r--p 00002000 03:01 786467     /lib/libdl-2.6.so
  43. b7f4c000-b7f4d000 rw-p 00003000 03:01 786467     /lib/libdl-2.6.so
  44. b7f4d000-b7f4e000 rw-p b7f4d000 00:00 0
  45. b7f64000-b7f65000 r-xp b7f64000 00:00 0          [vdso]
  46. b7f65000-b7f80000 r-xp 00000000 03:01 786454     /lib/ld-2.6.so
  47. b7f80000-b7f81000 r--p 0001a000 03:01 786454     /lib/ld-2.6.so
  48. b7f81000-b7f82000 rw-p 0001b000 03:01 786454     /lib/ld-2.6.so
  49. bfe04000-bfe19000 rw-p bffeb000 00:00 0          [stack]
  50. 已放弃
复制代码

论坛徽章:
0
2 [报告]
发表于 2009-02-27 22:48 |只看该作者
对awk学得不太好,帮你顶,高手进来!

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
3 [报告]
发表于 2009-02-28 00:07 |只看该作者

回复 #1 ywlscpl 的帖子

substitue中的\\n相当于 sed 中的\n。

\\4应该不会出现你所讲的情况。

论坛徽章:
0
4 [报告]
发表于 2009-02-28 09:06 |只看该作者
原帖由 blackold 于 2009-2-28 00:07 发表
substitue中的\\n相当于 sed 中的\n。

\\4应该不会出现你所讲的情况。

[root@apache ~]#  echo "abc||abc123 123abc xyz123" | awk '{print gensub(/abc/,"\\4",1,$1)}'
*** glibc detected *** malloc(): memory corruption: 0x08768a10 ***
Aborted
我这里运行的时候也出现了问题!

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
5 [报告]
发表于 2009-02-28 09:19 |只看该作者

回复 #4 飞鸿无痕 的帖子

\\3 \\2等却没有问题吗?

论坛徽章:
0
6 [报告]
发表于 2009-02-28 09:23 |只看该作者
echo "abc||abc123 123abc xyz123" | awk '{print gensub(/(a)bc/,"\\1",1,$1)}'
echo "abc||abc123 123abc xyz123" | awk '{print gensub(/(a)b(c)/,"\\2",1,$1)}'
输入上面2句看看

论坛徽章:
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
7 [报告]
发表于 2009-02-28 09:24 |只看该作者
这显然是大脑和awk的双重bug嘛
“\\n"表示表达示第n个()匹配的内容,你没()就用\n?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
8 [报告]
发表于 2009-02-28 09:28 |只看该作者

回复 #7 waker 的帖子

但在这种情况下,\\n应该是空才对啊。

我的环境下都没有问题。

论坛徽章:
0
9 [报告]
发表于 2009-02-28 10:01 |只看该作者
原帖由 waker 于 2009-2-28 09:24 发表
这显然是大脑和awk的双重bug嘛
“\\n"表示表达示第n个()匹配的内容,你没()就用\n?


有点明白\n用法了,得现在pattern中定义好()

论坛徽章:
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
10 [报告]
发表于 2009-02-28 10:25 |只看该作者
原帖由 blackold 于 2009-2-28 09:28 发表
但在这种情况下,\\n应该是空才对啊。

我的环境下都没有问题。

如果\\n是个引用呢?这个引用被设计用指针来实现而没有必要的语法检测呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP