免费注册 查看新帖 |

Chinaunix

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

[文本处理] 如何提取多个字符串 [复制链接]

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
11 [报告]
发表于 2016-03-14 17:00 |只看该作者
  1. eval $(echo '[10665266][14Jan16 12:15:07.987] [In] ferf Dhyfj.4532.1.uploadFrestVevgRbvfg:freferName: fersvrvgfv 5, Dhyfj-[ew33:1203-cdfvs] ferf Dhyfj.4532.1 vsrv-vrv.uytn.ASF.Pvfdvfg vgbtbFbgb for FEytb4FEF:WDCSD6FEFCS3 [DFC-P:1/1 F:0/0]-Passed, Dcdc-[T:1836 P:1798 F:38]'|awk -F'[] ,.-]' '{print "t1="$3"."$4,"t2="$10,"t3="$36,"t4="gensub(/.*:/,"","g",$31),"t5="$28}')

  2. echo "$t1 $t2 $t3 $t4 $t5"
  3. 12:15:07.987 4532 Passed WDCSD6FEFCS3 Pvfdvfg
复制代码

论坛徽章:
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
12 [报告]
发表于 2016-03-14 17:29 |只看该作者
@sunzhiguolu @haooooaaa @elu_ligao @hz_oracle @关阴月飞

没有规则
echo "t1=12:15:07.987,t2=4532,t3=Passed,t4=WDCSD6FEFCS3,t5=Pvfdvfg"

论坛徽章:
1
15-16赛季CBA联赛之广夏
日期:2016-04-12 15:53:16
13 [报告]
发表于 2016-03-14 17:48 |只看该作者
@moperyblue 理解我了
我的意思是:
就是这一行
[10665266][14Jan16 12:15:07.987] [In] ferf Dhyfj.4532.1.uploadFrestVevgRbvfg:freferName: fersvrvgfv 5, Dhyfj-[ew33:1203-cdfvs] ferf Dhyfj.4532.1 vsrv-vrv.uytn.ASF.Pvfdvfg vgbtbFbgb for FEytb4FEF:WDCSD6FEFCS3 [DFC-P:1/1 F:0/0]-Passed, Dcdc-[T:1836 P:1798 F:38]

红色的是我要提取的字符串,然后可以的话帮忙分别赋值给变量

我的想法是用sed提取红色字体的字符串提换成\1,\2,\3,\4,\5这样的5个group,

如果可以这样t1=\1,t2=\2,t3=\3,t4=\4,t5=\5这样子


但是我试了。。得不到结果

论坛徽章:
1
15-16赛季CBA联赛之广夏
日期:2016-04-12 15:53:16
14 [报告]
发表于 2016-03-14 17:50 |只看该作者
回复 11# moperyblue


    终于有个人理解我了!

非常感谢

但是可不可以用sed,或者awk,

新手

论坛徽章:
1
15-16赛季CBA联赛之广夏
日期:2016-04-12 15:53:16
15 [报告]
发表于 2016-03-14 17:57 |只看该作者
@sunzhiguolu @haooooaaa @elu_ligao @hz_oracle @关阴月飞 @jason680

本来想在13楼@你们
但是不太会发帖,可以帮忙看下13楼,

3q

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
16 [报告]
发表于 2016-03-14 20:49 |只看该作者
  1. sed -r 's/.*\s(\S+)] \[In][^.]*.([^.]*).*\.([^.]*)\s\S+\sfor[^:]*:(\w+)[^,]*-([^-]*),.*/t1=\1,t2=\2,t3=\3,t4=\4,t5=\5/'
复制代码
?

论坛徽章:
1
15-16赛季CBA联赛之广夏
日期:2016-04-12 15:53:16
17 [报告]
发表于 2016-03-14 21:04 |只看该作者
回复 16# moperyblue


   谢谢,我试试哈,


那再请教下

就是将第三列和第四列相比较,如果第三列与第四列相等,则把第四列赋值为空
file:
d,g,j,l,l
s,f,o,o,l
z,r,y,j,k
d,v,n,n,r
q,f,h,k,j
a,f,j,j,o
s,f,y,i,e

结果为这样的模式

d,g,j,l,l
s,f,o,,l
z,r,y,j,k
d,v,n,,r
q,f,h,k,j
a,f,j,,o
s,f,y,i,e



  thanks

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
18 [报告]
发表于 2016-03-14 21:18 |只看该作者
  1. sed -r 's/(([^,]*,){2})([^,]*),\3/\1\3,/'
  2. awk -F, -vOFS=, '$3==$4{$4=""}1'
复制代码
回复 17# _lpq


   

论坛徽章:
1
15-16赛季CBA联赛之广夏
日期:2016-04-12 15:53:16
19 [报告]
发表于 2016-03-14 22:40 |只看该作者
回复 18# moperyblue

1.
sed -r 's/(([^,]*,){2})([^,]*),\3/\1\3,/'

输出结果为:
d,g,j,l,    #其他行都是对的,这一行最后少了个l
s,f,o,,l
z,r,y,j,k
d,v,n,,r
q,f,h,k,j
a,f,j,,o
s,f,y,i,e

2.
awk -F, -vOFS=, '$3==$4{$4=""}1'

输出结果会把第四列全为空

d,g,j,,l
s,f,o,,l
z,r,y,,k
d,v,n,,r
q,f,h,,j
a,f,j,,o
s,f,y,,e

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
20 [报告]
发表于 2016-03-14 23:12 |只看该作者
本帖最后由 moperyblue 于 2016-03-14 23:14 编辑

回复 19# _lpq

sed -r 's/^(([^,]*,){2})([^,]*),\3/\1\3,/'


  1. echo 'd,g,j,l,l
  2. s,f,o,o,l
  3. z,r,y,j,k
  4. d,v,n,n,r
  5. q,f,h,k,j
  6. a,f,j,j,o
  7. s,f,y,i,e'|awk -F, -vOFS=, '$3==$4{$4=""}1' #GNU Awk 4.1.3
  8. d,g,j,l,l
  9. s,f,o,,l
  10. z,r,y,j,k
  11. d,v,n,,r
  12. q,f,h,k,j
  13. a,f,j,,o
  14. s,f,y,i,e
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP