Board logo

标题: [已解决]请问用sed命令如何批处量删除文件每行的倒数第n个字符 [打印本页]

作者: gannh    时间: 2013-4-27 11:33     标题: [已解决]请问用sed命令如何批处量删除文件每行的倒数第n个字符

本帖最后由 gannh 于 2014-5-31 15:08 编辑

如题,现在有多个文本文件,请问用sed命令如何批量删除文件每行的倒数第n个字符?n可以为1,2,3,4.。。。。?不知道这边有没有大师可以帮忙?谢谢
作者: terse    时间: 2013-4-27 12:45

本帖最后由 terse 于 2013-4-27 12:47 编辑

回复 1# gannh
注意 里面 N 是数字
  1. sed -r "s/(.*).((.){N})$/\1\2/" filename
复制代码

作者: gannh    时间: 2013-4-27 13:14

刚才试了一下,只能删除的是正数第四个字符,而不是倒数第四个字符,不知道是怎么回事呢,谢谢指教
作者: terse    时间: 2013-4-27 13:27

回复 3# gannh
我这里是可以的
要不这样试
  1. @echo off
  2. :设置序列
  3. set n=6
  4. :设置字数
  5. set m=1
  6. set /a n-=m
  7. sed -r "s/(.*)((.){%m%})((.){%n%})$/\1\4/" filename
  8. pause
复制代码

作者: gannh    时间: 2013-4-27 13:40

还是不行呢,按你最新的代码,复制到bat运行后没反应呢
我的是文件内容是有中文的,是不是这个原因呢?
但我新建了一个txt文件,输入
87654321
12345678
上面的代码运行后,没变的,这就奇怪了
作者: gannh    时间: 2013-4-27 13:44

我的问题是:有N个txt文件,每个txt文件里有N行,长短不一,现在我想批量删除里面的每行倒数第n个字符,如:
12345
acdbedrfert
tx谢谢指教txtxt

现在我想删除倒数第3个字符后变成
1245
acdbedrfrt
tx谢谢指教txxt

问题就是这样,希望有大师提供指导,谢谢
作者: terse    时间: 2013-4-27 14:07

回复 6# gannh
不知你的版本多少
我这里测试是成功的
将你的测试字符 copy 到 a.txt 和b.txt
结果是:
作者: gannh    时间: 2013-4-27 14:15

好的,我再试试看,谢谢指点
作者: BAT-VBS    时间: 2013-4-27 17:37

回复 8# gannh


试试4.2.2这个版本的sed
http://www.bathome.net/thread-16975-1-1.html
作者: gannh    时间: 2013-4-28 16:54

我的是这个版本啊
作者: CrLf    时间: 2013-4-28 18:32

我现在都搞不清楚 sed 中向后引用的括号要不要加 \ 了...
  1. @sed "s/.\(.\{4\}\)$/\1/g" a.txt>b.txt
复制代码

作者: BAT-VBS    时间: 2013-4-28 18:56

回复 11# CrLf


    要加。使用 -r 之后可以不加。




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