Chinaunix

标题: 用awk和sed实现模糊匹配替换 [打印本页]

作者: wbbshen    时间: 2012-11-27 11:37
标题: 用awk和sed实现模糊匹配替换
0|3|0|1|1|13915981874|520|25|8613915981|20||||46001391598187|20121127095746|20121127095778|0|0||1||||025|25|0000|0000|||||11110||||||0||||||||||||520|1111000000|
处理后:
0|3|0|1|1|13915981874|520|25|8613915981|20||||46001391598187|||0|0||1||||025|25|0000|0000|||||11110||||||0||||||||||||520|1111000000|

要求:将其中匹配2012的字符串:20121127095746和20121127095778替换为空 (这两个除了2012为常量,其它均为变化的数值)

awk -F '|' '{gsub(/……2012/,"")}{print}' abc.txt
这个只能将2012规格掉,不符合要求,请问有什么办法么?
作者: rdcwayx    时间: 2012-11-27 11:43
本帖最后由 rdcwayx 于 2012-11-27 13:44 编辑
  1. awk '{for (i=1;i<=NF;i++) if ($i~/2012/) $i=""}1' FS=\| OFS=\| infile
复制代码

作者: 代号:军刀    时间: 2012-11-27 12:20
  1. sed 's/2012[0-9]\{10\}//g' urfile
复制代码

作者: wbbshen    时间: 2012-11-27 13:00
~/2012/:~是不是可以理解为模糊匹配
2012[0-9]\{10\}:10应该是位数
多谢楼上两位.
作者: yestreenstars    时间: 2012-11-27 13:51
  1. sed 's/[^|]*2012[^|]*//g' file
复制代码

作者: kernel69    时间: 2012-11-27 15:36
  1. perl -F'\|' -lane 'print  if s/$F[14]// && s/$F[15]//'
复制代码

作者: vic260844    时间: 2012-11-27 16:13
来一个复杂一点,大材小用的awk
  1. awk -F"|" 'BEGIN{OFS="|"}{for (i=1;i<=NF;i++) { if ($i ~ /2012........./) $i=""}print}'  file
复制代码

作者: wbbshen    时间: 2012-11-27 17:49
这个.....好象很有意思嘛回复 7# vic260844


   
作者: wbbshen    时间: 2012-11-27 17:49
没有用过perf,也谢了回复 6# kernel69


   




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