免费注册 查看新帖 |

Chinaunix

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

关于利用正则表达式取值得问题,很变态。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-01 14:26 |只看该作者 |倒序浏览
一个文本中大概有这样类型的三句话,
I emcmk01v emcmk01v                                emunk01v:sjPEX_pxd 08-07-16 00:05:18 !PEX001 ジョブ状況通知  [起動](日付:20080715,システム:EM_SYS,フレーム:EMCMKF01,ネット:EMBHN100,ジョブ:EMBH120D,ノード:emcmk01v,起動コマンド:SUBSENJU EM A)
I emunk01v emunk01v                                emunk01v:sjPEX_pxd 08-07-16 00:00:00 !PEX021 ネット状況通知  [起動](日付:20080715,システム:EM_SYS,フレーム:EMODBF01,ネット:EMOXN210)
I emunk01v emunk01v                                emunk01v:sjPEX_pxd 08-07-16 02:30:07 !PEX041 フレーム状況通知[起動](日付:20080715,システム:EM_SYS,フレーム:EURBFOL)
现在要把其中的(日付:20080715,システム:EM_SYS,フレーム:EMCMKF01,ネット:EMBHN100,ジョブ:EMBH120D,ノード:emcmk01v,起動コマンド:SUBSENJU EM A)
EM_SYS EMCMKF01 EMBHN100 EMBH120D
取出来,并且按照上边的格式输出到output.log中,如果没有的话就显示-,但是因为系统不支持日文,所以不能根据[日付:][システム:][フレーム:][ジョブ]这几个关键字来找到EM_SYS EMCMKF01 EMBHN100 EMBH120D 这几个值,那应该怎么办呢

论坛徽章:
4
白银圣斗士
日期:2015-11-24 10:40:40技术图书徽章
日期:2015-11-26 13:47:47平安夜徽章
日期:2015-12-26 00:06:30技术图书徽章
日期:2016-07-19 13:54:03
2 [报告]
发表于 2008-08-01 14:54 |只看该作者
唉,看着晕,帮顶

论坛徽章:
0
3 [报告]
发表于 2008-08-01 15:03 |只看该作者
很好,很变态

论坛徽章:
0
4 [报告]
发表于 2008-08-01 15:15 |只看该作者
可不可能利用
(日付:20080715,システム:EM_SYS,フレーム:EMCMKF01,ネット:EMBHN100,ジョブ:EMBH120D,ノード:emcmk01v,起動コマンド:SUBSENJU EM A)
里面的:来取呢

论坛徽章:
0
5 [报告]
发表于 2008-08-01 15:35 |只看该作者
没看懂。。

论坛徽章:
0
6 [报告]
发表于 2008-08-01 15:43 |只看该作者
就是说我想把
I emcmk01v emcmk01v                                emunk01v:sjPEX_pxd 08-07-16 00:05:18 !PEX001 ジョブ状況通知  [起動](日付:20080715,システム:EM_SYS,フレーム:EMCMKF01,ネット:EMBHN100,ジョブ: EMBH120D,ノード:emcmk01v,起動コマンド:SUBSENJU EM A)
这一行里的 EM_SYS,EMCMKF01,EMBHN100,EMBH120D取出来,但是正则表达式不能根据前面的日文写,比如说システム:フレーム:ネット:ジョブ: 等等。

论坛徽章:
0
7 [报告]
发表于 2008-08-01 16:29 |只看该作者
观察了一下,数据是固定格式,可以用获取字符串的方式获得需要的数据
大概写了个,没法测试- -.
awk '{print substr($0,141,6),substr($0,158,,substr($0,174,,substr($0,190,}'

我打小数数不及格,拿错字符的话自己改改。

论坛徽章:
0
8 [报告]
发表于 2008-08-01 16:33 |只看该作者
那个日文确实很变态,在vi里都不能复制的说....

论坛徽章:
0
9 [报告]
发表于 2008-08-01 16:54 |只看该作者
原帖由 shijiu 于 2008-8-1 16:29 发表
观察了一下,数据是固定格式,可以用获取字符串的方式获得需要的数据
大概写了个,没法测试- -.
awk '{print substr($0,141,6),substr($0,158,,substr($0,174,,substr($0,190,}'

我打小数数不及格, ...


数据并不是固定的格式,因为太多,我只摘取了一部分.

我的想法是用,分割出几个部分,然后对每个部分进行处理
比如说

第一部分
I emcmk01v emcmk01v                                emunk01v:sjPEX_pxd 08-07-16 00:05:18 !PEX001 ジョブ状況通知  [起動](日付:20080715,
第二部分
システム:EM_SYS,
第三部分
フレーム:EMCMKF01,
等等

是不是就可以了
只是有这个想法,还没有去实现呢。

论坛徽章:
0
10 [报告]
发表于 2008-08-01 17:37 |只看该作者
复杂了点:

  1. sed 's/[()]/|/g' urfile |awk -F'|' '{print $2}'|awk -F',' '
  2. {
  3. for(n=2;n<6;n++)
  4. {
  5.   if( $n ~ /.*EM_SYS/)
  6.      {prit $n;continue;}
  7.   else
  8.      {print "--------"}
  9.   if($n ~ /.*EMCMKF01/)
  10.      {print $n;continue;}
  11.   else
  12.     {print "--------"}
  13.   if($n ~ /.*EMBHN100/)
  14.      {print $n;continue;}
  15.   else
  16.      {print "--------"}
  17.   if($n ~ /.*EMBH120D/)
  18.      {print $n;continue;}
  19.   else
  20.      {print "--------"}
  21. }
  22. }'
复制代码

[ 本帖最后由 爱知 于 2008-8-1 18:50 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP