Board logo

标题: [文本处理] 这样奇葩的文本批处理能搞定吗? [打印本页]

作者: bl5062    时间: 2014-9-28 18:09     标题: 这样奇葩的文本批处理能搞定吗?

假设有一文本存放了一批邮箱与昵称,但因为是多人输入帖子回复里的,所以格式很无语的混乱,能不能把这些信息统一成:邮箱空格昵称 的形式?
下面是一些例子,作为测试数据使用。我们大致统计了下有空格、制表符、逗号、分号、竖线、空格竖线空格、百分号、多个相同符号、以及其他组合。
有的一行中还有其他信息。
有的邮箱前后有尖括号。
有的整行都是其他信息。

123456@qq.com cccccccc
123457@qq.com        cccccccc2
1123456@qq.com,cccggggcc
156723457@qq.com;ccccxcvcccc1
1567xzxvdv@163.com | reydhdfhdh
1567xzfgxvdv@163.com|reydfdhdfhdh
1567xzfgxvdv@163.com        %        reydfdhdfhdh
dfhgdxvdv@163.com%%%%reydfdhdfghfhdh
<dfdhgrg456dxvdv@163.com> reyd785hdh
;<dfdhgrg456dxvdv@163.com> | reyd785hdh
其他信息 | reyd785hdh | dfdhgrg456dxvdv@163.com | 其他信息
作者: apang    时间: 2014-9-28 20:49

或许可以这样:
  1. sed -r "s/[^a-z0-9_@\.\s-]+/ /ig;s/^ | $//g;s/(.+) (.+@.+)/\2 \1/" a.txt>b.txt
复制代码

作者: CrLf    时间: 2014-9-29 06:16

这格式蛋疼得...都直不起腰了
作者: bl5062    时间: 2014-9-29 08:42

或许可以这样:
apang 发表于 2014-9-28 20:49



    测试了下不行,说没有sed命令,改为set后又说环境变量 -r "s/[^a-z0-9_@\.\s-]+/ /ig;s/^ | $//g;s/(.+) (.+@.+)/\2 \1/" a.txt 没有定义
作者: bl5062    时间: 2014-9-29 08:45

回复 2# apang
作者: 523066680    时间: 2014-9-29 08:47

回复 4# bl5062


    请在论坛里搜索sed ,下一个。
作者: DAIC    时间: 2014-9-29 08:58

回复 4# bl5062


http://bbs.bathome.net/thread-3981-1-1.html
从这里下载一个sed.exe
放到 C:\Windows\System32 目录下面
作者: Linuxer    时间: 2014-9-29 09:23

回复 4# bl5062


    sed 是第三方工具,,和set是不同的概念,,按照7楼的地址和方法操作一下~~祝你成功~
作者: bl5062    时间: 2014-9-29 11:44

简直天神下凡,居然一句就搞定,佩服!!!!!!!!!!!
话说这就是传说中的正则表达式?能解释下这句话吗?
作者: DAIC    时间: 2014-9-29 13:12

回复 9# bl5062


嗯,那就是正则表达式,建议你自己找本书看看,比如《精通正则表达式》
作者: apang    时间: 2014-9-29 15:56

本帖最后由 apang 于 2014-9-29 15:58 编辑

回复 9# bl5062


    我是吃五谷杂粮、食人间烟火的人类,不是神仙哦。大致思路:
1:
s/[^a-z0-9_@\.\s-]+/ /ig
把一个或多个连续的非英文字母、数字、下划线、@、点、减号替换成一个空格
(这里的\s是多余的,请删掉)
比如这样一行:
;<[email]dfdhgrg456dxvdv@163.com[/email]> | reyd785hdh
会把“;<”替换成一个空格,把“> | ”替换成一个空格

2:
s/^ | $//g
经过第一步处理后,字串开头和结尾可能会含有一个空格字符
这一步就是删掉开头或结尾的空格

3:
s/(.+) (.+@.+)/\2 \1/
如果昵称在前、邮箱在后,则交换它们的位置

注意:代码并不检测邮箱名是否有效(假设a.txt中录入的都是有效邮箱、昵称)
作者: pubuntu    时间: 2014-9-30 23:45

这奇葩格式啊。。。怎么这么坑。。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2