LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1200|回复: 5

问一个正则表达式问题

[复制链接]
发表于 2008-2-15 00:27:57 | 显示全部楼层 |阅读模式
一行文本:
fdsafn');attach('1.jpg', 203591, 314);attach('2.jpg', 194439, 203932);attach('
1999.7长城巅峰.jpg', 24238, 398400);attach('3.gif', 101486, 1024905);o.h(0);
o.t();

我想把此行文本中,个数不固定的attach括号里的3列存入一个文件中,格式如下:
1.jpg 203591 314
2.jpg 194439 203932
。。。

如何操作?

多谢
发表于 2008-2-15 09:38:45 | 显示全部楼层
一个想法:
* 先合并所有的行
* 再根据 ';' 断行
* 再提取数据


  1. tr -d '\n' < xx.dat |
  2.     tr -s ';' '\n' |
  3.     grep '^attach.*)' |
  4.     sed -e "s/^attach('//" \
  5.         -e "s/', / /g" \
  6.         -e "s/, / /g" \
  7.         -e "s/)$//"
复制代码

效率必然非常低下, 仅起抛砖引玉之用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-2-15 22:13:42 | 显示全部楼层
tr命令给了我启发。

我把");"替换成";\n"变成多行,就很好处理了。多谢
回复 支持 反对

使用道具 举报

发表于 2008-2-19 13:09:48 | 显示全部楼层
awk -F'["attach", '\''()]+' 'BEGIN{RS=";"}/attach/{print $2,$3,$4}' finaname | awk 'NF>0'
回复 支持 反对

使用道具 举报

发表于 2008-2-19 14:15:33 | 显示全部楼层
这样更短
awk -F'["attach", '\''()]+' 'BEGIN{RS=";"}$3=$3' finaname | awk 'NF>0'
回复 支持 反对

使用道具 举报

发表于 2008-2-25 14:22:02 | 显示全部楼层
  1. perl -ne "@array=m/attach\('(.*?)',(.+?),(.+?)\);/g;for($i=0;$i<=@array;){print $array[$i++],$array[$i++],$array[$i++],chr(10);}" urfile
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表