Chinaunix

标题: 一行有多个匹配字符串,如何只保留最后一个 [打印本页]

作者: dgww    时间: 2012-02-16 18:16
标题: 一行有多个匹配字符串,如何只保留最后一个
数据如下,

[20120216-17:58:22][NOTE][20120216-17:58:22]
[NOTE]INFO[20120216-17:58:22]
[20120216-17:58:22][NOTE][20120216-17:58:22]i[20120216-17:58:22]n[20120216-17:58:23]f[20120216-17:58:24]o[20120216-17:58:25]
[20120216-17:58:26] information a
[20120216-17:58:26] information b
[20120216-17:58:27] information c
information d
information e
[20120216-17:58:27] information f

----------------------------------------
每行可能包含或不包含时间戳,[20120216-17:58:22],也可能包含多个时间戳。

要求输出如下,若当前行包含字符串"[NOTE]",则只保留最后一个时间戳,其余时间戳删除。若当前行不包含字符串"[NOTE]",则全部时间戳删除。
[NOTE][20120216-17:58:22]
[NOTE]INFO[20120216-17:58:22]
[NOTE]info[20120216-17:58:25]
information a
information b
information c
information d
information e
information f



作者: zooyo    时间: 2012-02-16 20:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: winway1988    时间: 2012-02-16 22:05
  1. [root@winway test]# cat sedscr
  2. /\[NOTE\]/{
  3. :a
  4. s/\(.*\)\[[-:0-9]*\]\(.*\[[-:0-9]*\].*\)/\1\2/
  5. ta
  6. b
  7. }
  8. s/ *\[[-:0-9]*\] *//g
复制代码

作者: yinyuemi    时间: 2012-02-17 06:51
awk -vRS='[[0-9:-]+]\n' '{cmd=gsub(/[[0-9:-]+] */,"")}/NOTE/{cmd;printf $0 RT;next}NF&&cmd'
作者: jason680    时间: 2012-02-17 08:57
回复 1# dgww


$ awk -F'[][]' '{t="";if(/NOTE/)t="["$(NF-1)"]";gsub(/\[[0-9:-]*\] */,"");print $0""t}' note.txt
[NOTE][20120216-17:58:22]
[NOTE]INFO[20120216-17:58:22]
[NOTE]info[20120216-17:58:25]
information a
information b
information c
information d
information e
information f
   
作者: jiejie455    时间: 2012-02-17 09:58
sed -r '/[NOTE]/{s/(\[[0-9\:\-]*\])([^$])/\2/g;p;d};s/\[[0-9\:\-]*\][ ]?//g' data
作者: blackold    时间: 2012-02-17 10:20
  1. sed '/\[NOTE\]/!{s/\[[0-9 :-]*\]//g};:n;s/\[[0-9 :-]*\]\(.*\[[0-9 :-]*\]\)/\1/;tn' urfile
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2