Board logo

标题: [文本处理] 【已解决】批处理用分号取代文件里每行尾端(右)空格 [打印本页]

作者: hp051247767    时间: 2014-8-22 16:53     标题: 【已解决】批处理用分号取代文件里每行尾端(右)空格

本帖最后由 hp051247767 于 2014-8-25 08:10 编辑

如何在txt中用分号取代文件里每行尾端(右)空格
如原檔test.txt
2014/8/21 上午 11:21  D:\09.(GM0)\工安課\17、OHSAS-02(NEW)\TSMC OHSAS專案\列管Level-1技能合格證名冊100.12.10.xls  john
2014/8/21 上午 11:25  D:\09.(GM0)\工安課\17、OHSAS-02(NEW)\TSMC OHSAS專案\JG 100.11\局限空間學科考卷-A.+術科.doc  lily
2014/8/21 上午 11:41  D:\09.(GM0)\工安課\17、OHSAS-02 (NEW)\作業環境測定\102年\102.11.27  joann
2014/8/21 上午 11:45  D:\04.公用區\軟體\BR11.5A.exe maggie
加分号得到下面的效果

2014/8/21 上午 11:21  D:\09. GM0\工安課\17、OHSAS-02 (NEW)\TSMC OHSAS專案\列管Level-1技能合格證名冊100.12.10.xls ;john
2014/8/21 上午 11:25  D:\09. GM0\工安課\17、OHSAS-02 (NEW)\TSMC OHSAS專案\JG 100.11\局限空間學科考卷-A.+術科.doc;lily
2014/8/21 上午 11:41  D:\09. GM0\工安課\17、OHSAS-02 (NEW)\作業環境測定\102年\102.11.27;joann
2014/8/21 上午 11:45  D:\04.公用區\軟體\BR11 5A.exe;maggie
作者: apang    时间: 2014-8-22 18:33

  1. sed -r "s/ +([^ ]+)$/;\1/g" test.txt>test1.txt
复制代码

作者: CrLf    时间: 2014-8-22 19:12

本帖最后由 CrLf 于 2014-8-22 19:13 编辑

回复 2# apang


    貌似可以利用贪婪匹配简化一下
  1. sed -r "s/(.*) /\1;/" test.txt>test1.txt
复制代码

作者: apang    时间: 2014-8-22 19:40

回复 3# CrLf


    但如果要删除最后多个空格的话,貌似要这样?
  1. sed -r "s/(.*[^ ]) +/\1;/" a.txt>b.txt
复制代码

作者: CrLf    时间: 2014-8-22 20:24

本帖最后由 CrLf 于 2014-8-22 20:52 编辑

回复 4# apang


    突然发现你用的是 +,原来 sed 启用了 -r 后可以用 + 了,可惜还是不支持预查
    可以用 \S 和 \s 简化下,为 -r 开关点赞:
  1. sed -r "s/(.*\S)\s+/\1;/" a.txt>b.txt
复制代码
话说很郁闷 sed 的引用序号为什么不是从最内层到最外层,而是从左到右,原来想回复这个的:
  1. sed -r "s/(.*)(( +))/\1;/"
复制代码

作者: apang    时间: 2014-8-24 00:17

回复 5# CrLf


    引用序号好像是从外到内,从左到右
  1. Set re = New RegExp
  2. re.Pattern = "((.).(.))."
  3. s = re.Replace("abcd", "$1, $2, $3")
  4. MsgBox s
复制代码
$1为abc,$2为a,$3为c
试了下,sed也是这样的
C:\Windows\System32>echo,abcd|sed -r "s/((.).(.))./\1, \2, \3/"
abc, a, c

C:\Windows\System32>

作者: 523066680    时间: 2014-8-24 10:09

用 $锚定最后部分
s/ +(\w+)$/;$1/;




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