Board logo

标题: [文本处理] [已解決] fr.exe如何利用正则表达式移除文件空白行? [打印本页]

作者: strong12345    时间: 2011-7-31 01:16     标题: [已解決] fr.exe如何利用正则表达式移除文件空白行?

本帖最后由 strong12345 于 2011-8-1 17:05 编辑

请问
如何利用正则表达式移除文件空白行
这是小弟目前代码,但是有些bug...
  1. fr.exe  文件.txt  -r:"[\r\n\r\n]+"  -t:"\r\n"
复制代码
有3个bug
1. 无法移除第一行的空白行
2. 无法移除最末行的空白行
3. 无法移除包含空白字符(\s)的空白行

请问该怎么修正代码,请知道的大大帮忙一下
感激不尽!


(ps.)我用firefox怎么没有话题分类的选项... 还要用IE TAB...

作者: CUer    时间: 2011-7-31 11:11

  1. sed "/^[ \t]*$/d" a.txt
复制代码

作者: powerbat    时间: 2011-7-31 11:16

这个论坛就是专业批处理论坛好吧,这个版块就是批处理版块好吧,标题中能不能不要加无意义的“批处理”三个字?
标题用“fr.exe如何利用正则表达式移除文件空白行?”不是更好?写标题不要太随心所欲,更何况楼主是老会员。
作者: strong12345    时间: 2011-7-31 11:20

回复 3# powerbat
不好意思,已修改
作者: strong12345    时间: 2011-7-31 11:25

回复 2# CUer
初步尝试似乎不行 =.=
是我的文本里有中文的原因吗?
作者: CUer    时间: 2011-7-31 11:31

回复 5# strong12345


你上传个附件我测试下?
作者: strong12345    时间: 2011-7-31 11:49

回复 6# CUer
这是big5码喔
中国大陆地区看起来应该是乱码= =
作者: CUer    时间: 2011-7-31 12:02

回复 7# strong12345


我这里测试没有问题。
你用的哪个版本的sed啊?
作者: strong12345    时间: 2011-7-31 12:05

最近想学习一些第3方的文本处理软件用法
感觉功能很强大
但不知道学什么好
gawk  sed   还是什么比较好 @@
作者: strong12345    时间: 2011-7-31 12:08

本帖最后由 strong12345 于 2011-7-31 12:15 编辑

回复 8# CUer
我不知道怎么看他的版本耶= = (/? 无效...??)
我只知道他的md5是81cb44f6676039ed327f98e1e6966635
我下载新的sed看看好了

我比较过了.. 4.14 单文件版
作者: CUer    时间: 2011-7-31 13:48

回复 10# strong12345
  1. sed --version
复制代码

作者: tmplinshi    时间: 2011-7-31 14:44

本帖最后由 tmplinshi 于 2011-7-31 14:50 编辑

回复 10# strong12345


强烈建议使用这个版本:

    GNU sed v4.0.7 单文件版(使用 -i 参数不生成备份文件)
    http://bathome.net/thread-13353-1-1.html

与“4.14 单文件版”相比,不但


-i[扩展名], --in-place[=扩展名]
               直接修改文件(如果指定扩展名就备份文件)


很多版本,即使没有指定扩展名,仍然会备份文件。“GNU sed v4.0.7 单文件版”没有这个问题。
作者: strong12345    时间: 2011-7-31 14:54

请问是我的作法有误吗@@
我一般浆sed.exe放在 system32\ 下,方便修改
可是我在DOS视窗下,输入sed --version ,或是其他sed指令,都是出现一个不支援中文的dos窗口 ??
附上我测试的档案及图片...

附件過大,因此傳到網路空間(包含sed.exe 4.14)
测试档案
作者: tmplinshi    时间: 2011-7-31 14:56

回复 13# strong12345


是版本问题。
作者: tmplinshi    时间: 2011-7-31 15:05

回复  CUer
初步尝试似乎不行 =.=
是我的文本里有中文的原因吗?
strong12345 发表于 2011-7-31 11:25



加 -i 参数:
  1. sed -i "/^[ \t]*$/d" a.txt
复制代码

作者: CUer    时间: 2011-7-31 15:45

回复 13# strong12345


试试版主提供的4.0.7
作者: strong12345    时间: 2011-7-31 16:10

本帖最后由 strong12345 于 2011-7-31 16:18 编辑

是的,我用4.07成功了,感谢版主
可是,替换后的换行 变成仅是 \n ,不是一般notepad 认识的 \r\n
另外,最末行的空行,也无法替换,请问此点可改善吗 @@

另外想请问 gawk代码,个人目前比较想学gawk...
谢谢

另外我刚刚查了一下,sed 出4.2.1 单文件版本了
网站 http://gnuwin32.sourceforge.net/packages/sed.htm
似乎也没有单文件 =.= 还是要dll档
作者: CUer    时间: 2011-7-31 16:16

回复 17# strong12345


4.2.1在使用-i选项的时候会自动生成一个备份文件,感觉不爽。
作者: CUer    时间: 2011-7-31 16:22

回复 17# strong12345
  1. sed "/^[ \t]*$/d" a.txt | more >b.txt
复制代码
这样应该不会有\n的问题了吧
作者: tmplinshi    时间: 2011-7-31 16:24

是的,我用4.07成功了,感谢版主
可是,替换后的换行 变成仅是 \n ,不是一般notepad 认识的 \r\n
另外, ...
strong12345 发表于 2011-7-31 16:10



果然 - -|||,这个应该算是 bug 了吧,sed414 和 sed421 都没有这个情况。

可以这样:
  1. sed -i "/^[ \t]*$/d; s/$/\r/" a.txt
复制代码
sed414 是可以替换成功的,你之前因为没有加 -i 参数。
作者: strong12345    时间: 2011-8-1 17:04

这2天再研究正则表达式...
小有心得
终于研究出用fr.exe去除空行的代码(包含\s \t 等空格行)
  1. ::去除所有空白行(包含 \s \t 等空白行)
  2. fr 文件.txt -r:"[\r\n]+(\s)+\n" -t:"\r\n"
  3. ::去除第一,最末空白行
  4. fr 文件.txt -r:"^\r\n|\r\n$" -t
复制代码
有个重点在于,有文字的行,尾端换行符为 \r\n
没有文字(只含 \s \t)的行,尾端换行符却只有 \n
作者: tmplinshi    时间: 2011-8-1 18:17

回复 21# strong12345
  1. fr 文件.txt -r:"^(\t|\s)*\n" -t
复制代码





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