免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: py超级菜鸟
打印 上一主题 下一主题

[文本处理] 请教一个正则表达式 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2013-12-03 10:23 |只看该作者
回复 10# Shell_HAT


    嗯 编辑好了   3q

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
12 [报告]
发表于 2013-12-03 10:26 |只看该作者
这下懂了,这是要逆天的节奏啊,
123[xxx这种不是匹配错了的内容吗?

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
13 [报告]
发表于 2013-12-03 10:27 |只看该作者
本帖最后由 yestreenstars 于 2013-12-03 11:27 编辑

原始文本:
  1. [root@localhost ~]# cat i
  2. sss[123[xxx]45]sss
  3. [root@localhost ~]#
复制代码
第一种需求:
  1. [root@localhost ~]# awk -F '' '{while(/\[/){for(i=0;++i<=NF;){if(k){if($i~/\]/)print s;s=s""$i}if($i~/\[/)k=1}s=k="";sub(/\[/,"")}}' i
  2. 123[xxx
  3. 123[xxx]45
  4. xxx
  5. xxx]45
  6. [root@localhost ~]#
复制代码
第二种需求:
  1. [root@localhost ~]# sed -r 's/.*\[([^][]*)\].*/\1/' i
  2. xxx
  3. [root@localhost ~]#
复制代码
适用于内部有多对中括号的情况:
  1. perl -lne '1 while(/\[([^][]*)\](?{print $1})/g)'
复制代码
  1. sed -nr '/\[.*\[/!b;s/(.*)\[([^][]*)\](.*)/\2\n\1\3/;P;D'
复制代码
  1. awk -F '' '{for(i=0;++i<=NF;){if($i~/\[/){s="";continue}if($i~/\]/&&s!~/\]/)print s;s=s""$i}}'
复制代码

论坛徽章:
0
14 [报告]
发表于 2013-12-03 10:35 |只看该作者
回复 13# yestreenstars


谢了 但是后面一种需求如果是

  1. echo sss[1[2]3[xxx]45]sss | sed -r 's/.*\[([^][]*)\].*/\1/'
  2. xxx
复制代码
好像不能得到2

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
15 [报告]
发表于 2013-12-03 10:37 |只看该作者
回复 13# yestreenstars

赞一个,个人只会写第2种。


   

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
16 [报告]
发表于 2013-12-03 10:37 |只看该作者
回复 14# py超级菜鸟
我加了个perl的方法~适用于你这种情况~

   

论坛徽章:
0
17 [报告]
发表于 2013-12-03 10:44 |只看该作者
回复 13# yestreenstars


  给力 谢了  {:3_203:}

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
18 [报告]
发表于 2013-12-03 10:51 |只看该作者
回复 14# py超级菜鸟
  1. [root@source ~]# echo "sss[1[2]3[xxx]45]sss"|grep -oP "(?<=\[)[^\[\]]*(?=\])"
  2. 2
  3. xxx
复制代码

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
19 [报告]
发表于 2013-12-03 11:19 |只看该作者
回复 14# py超级菜鸟
  1. echo "sss[1[2]3[xxx]45]sss" | awk '{while(match($0,/\[([^][]*)\]/)){print substr($0,RSTART+1,RLENGTH-2);$0=substr($0,RSTART+RLENGTH)}}'

  2. 2
  3. xxx
复制代码

论坛徽章:
5
白羊座
日期:2014-10-28 11:23:27水瓶座
日期:2015-01-20 10:19:022015亚冠之柏斯波利斯
日期:2015-07-11 18:17:2015-16赛季CBA联赛之同曦
日期:2015-12-23 12:38:582016猴年福章徽章
日期:2016-02-18 15:30:34
20 [报告]
发表于 2013-12-03 13:13 |只看该作者
sed 's/.*\[\([^][]*\)\].*/\1/'
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP