免费注册 查看新帖 |

Chinaunix

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

[文本处理] 请问大神,单用awk能输出与正则表达式匹配的内容吗? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2017-05-05 20:10 |只看该作者
回复 10# jason680

比如这段文字:
及载登相位,因揆当徙职,遂奏为试秘书监,江淮养疾。既无禄俸,家复贫乏,孀孤百口,丐食取给。萍寄诸州,凡十五六年,其牧守稍薄,则又移居,故其迁徙者,盖十余州焉。元载以罪诛,除揆睦州刺史,入拜国子祭酒、礼部尚书,为卢杞所恶。德宗在山南,令充入蕃贫会盟使,加左仆射。行至凤州,以疾卒,兴元元年四月也,年七十四。(节选自《旧唐书·李揆传》)

想要提取“疾”字所在的句子以及最后括号以其中的内容
目前采用的方法是:
awk '{while(match($0,/([^。?!:]*疾[^。?!:]*)(.+)((.+))/,arr)){print arr[1],arr[3];sub(/([^。?!:]*疾[^。?!:]*)/,"")}}'

抱歉,我不是不举例,只是我更想要通用的方法而不是根据情况通过变更分隔符的方法实现。
再次感谢!

论坛徽章:
0
12 [报告]
发表于 2017-05-05 20:10 |只看该作者
回复 10# jason680

比如这段文字:
及载登相位,因揆当徙职,遂奏为试秘书监,江淮养疾。既无禄俸,家复贫乏,孀孤百口,丐食取给。萍寄诸州,凡十五六年,其牧守稍薄,则又移居,故其迁徙者,盖十余州焉。元载以罪诛,除揆睦州刺史,入拜国子祭酒、礼部尚书,为卢杞所恶。德宗在山南,令充入蕃贫会盟使,加左仆射。行至凤州,以疾卒,兴元元年四月也,年七十四。(节选自《旧唐书·李揆传》)

想要提取“疾”字所在的句子以及最后括号以其中的内容
目前采用的方法是:
awk '{while(match($0,/([^。?!:]*疾[^。?!:]*)(.+)((.+))/,arr)){print arr[1],arr[3];sub(/([^。?!:]*疾[^。?!:]*)/,"")}}'

抱歉,我不是不举例,只是我更想要通用的方法而不是根据情况通过变更分隔符的方法实现。
再次感谢!

论坛徽章:
0
13 [报告]
发表于 2017-05-05 20:14 |只看该作者
回复 10# jason680
比如这段文字:
载衔恨颇深。及载登相位,因揆当徙职,遂奏为试秘书监,江淮养疾。既无禄俸,家复贫乏,孀孤百口,丐食取给。萍寄诸州,凡十五六年,其牧守稍薄,则又移居,故其迁徙者,盖十余州焉。元载以罪诛,除揆睦州刺史,入拜国子祭酒、礼部尚书,为卢杞所恶。德宗在山南,令充入蕃贫会盟使,加左仆射。行至凤州,以疾卒,兴元元年四月也,年七十四。(节选自《旧唐书·李揆传》)

比如要提取“疾”字所在的句子以及最后的括号以及其间的内容,我目前采用的方法是:
awk '{while(match($0,/([^。?!:]*疾[^。?!:]*)(.+)((.+))/,arr)){print arr[1],arr[3];sub(/([^。?!:]*疾[^。?!:]*)/,"")}}'

抱歉,我不是不想举例,而是想知道通用的方法而不是根据文本情况用变更分隔符的方法实现。
再次感谢!

论坛徽章:
0
14 [报告]
发表于 2017-05-05 20:16 |只看该作者
回复 10# jason680
比如这段文字:
载衔恨颇深。及载登相位,因揆当徙职,遂奏为试秘书监,江淮养疾。既无禄俸,家复贫乏,孀孤百口,丐食取给。萍寄诸州,凡十五六年,其牧守稍薄,则又移居,故其迁徙者,盖十余州焉。元载以罪诛,除揆睦州刺史,入拜国子祭酒、礼部尚书,为卢杞所恶。德宗在山南,令充入蕃贫会盟使,加左仆射。行至凤州,以疾卒,兴元元年四月也,年七十四。(节选自《旧唐书·李揆传》)

我这样写:
awk '{while(match($0,/([^。?!:]*疾[^。?!:]*)(.+)((.+))/,arr)){print arr[1],arr[3];sub(/([^。?!:]*疾[^。?!:]*)/,"")}}'

没有举例,主要是不想涉及分隔符,而求得一种通用方法。
多谢!


论坛徽章:
0
15 [报告]
发表于 2017-05-05 20:17 |只看该作者
  1. 比如这段文字:
  2. 载衔恨颇深。及载登相位,因揆当徙职,遂奏为试秘书监,江淮养疾。既无禄俸,家复贫乏,孀孤百口,丐食取给。萍寄诸州,凡十五六年,其牧守稍薄,则又移居,故其迁徙者,盖十余州焉。元载以罪诛,除揆睦州刺史,入拜国子祭酒、礼部尚书,为卢杞所恶。德宗在山南,令充入蕃贫会盟使,加左仆射。行至凤州,以疾卒,兴元元年四月也,年七十四。(节选自《旧唐书·李揆传》)

  3. 我这样写:
  4. awk '{while(match($0,/([^。?!:]*疾[^。?!:]*)(.+)((.+))/,arr)){print arr[1],arr[3];sub(/([^。?!:]*疾[^。?!:]*)/,"")}}'

  5. 没有举例,主要是不想涉及分隔符,而求得一种通用方法。
  6. 多谢!
复制代码

回复 10# jason680


论坛徽章:
0
16 [报告]
发表于 2017-05-05 20:18 |只看该作者
回复 10# jason680

怎么不能回复?

论坛徽章:
0
17 [报告]
发表于 2017-05-05 20:18 |只看该作者
比如这段文字:
载衔恨颇深。及载登相位,因揆当徙职,遂奏为试秘书监,江淮养疾。既无禄俸,家复贫乏,孀孤百口,丐食取给。萍寄诸州,凡十五六年,其牧守稍薄,则又移居,故其迁徙者,盖十余州焉。元载以罪诛,除揆睦州刺史,入拜国子祭酒、礼部尚书,为卢杞所恶。德宗在山南,令充入蕃贫会盟使,加左仆射。行至凤州,以疾卒,兴元元年四月也,年七十四。(节选自《旧唐书·李揆传》)

我这样写:
awk '{while(match($0,/([^。?!:]*疾[^。?!:]*)(.+)((.+))/,arr)){print arr[1],arr[3];sub(/([^。?!:]*疾[^。?!:]*)/,"")}}'

没有举例,主要是不想涉及分隔符,而求得一种通用方法。
多谢!

论坛徽章:
0
18 [报告]
发表于 2017-05-05 20:21 |只看该作者
抱歉,因为传输错误,上传了这么多次

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
19 [报告]
发表于 2017-05-05 21:03 |只看该作者
回复 11# sxingbai

How about this way for 通用的方法 ...

$ awk -f get_xxx.awk FILE
及载登相位,因揆当徙职,遂奏为试秘书监,江淮养疾 (节选自《旧唐书·李揆传》)
行至凤州,以疾卒,兴元元年四月也,年七十四 (节选自《旧唐书·李揆传》)

$ cat get_xxx.awk
function get_char(){
  if(match($0,"((.+))",m)){
    sub("((.+))","")
    return m[1]
  }
  return "";
}
function print_all(str,key,char){
  while(match(str,"([^。?!:]*"key"[^。?!:]*)",m)){
    str = substr(str,RSTART+RLENGTH);
    #sub(key,"<"key">",m[1]);
    print m[1],char;
  }
}
{
  char = get_char();
  print_all($0,"疾",char);
}

论坛徽章:
0
20 [报告]
发表于 2017-05-05 21:46 |只看该作者
回复 19# jason680

多谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP