标题: [文本处理] [已解决]批处理如何实现对字符串连接、替换及删除功能? [打印本页]
作者: xlkindy 时间: 2010-3-18 14:56 标题: [已解决]批处理如何实现对字符串连接、替换及删除功能?
例如有文本文件中内容如下:
字符串1;
字符串2;
字符串3;
字符串4;
字符串5;
字符串6;
希望通过批处理实现将该内容改成:
字符串1;字符串2
字符串3;字符串4
字符串5;字符串6
即从第二行的字符串起,将该字符串连接到其上一行后面,并删除其末尾原有的“;”号,并将其下一行上移一行,以此类推。
另:可以不使用中间文件来实现吗?
[ 本帖最后由 xlkindy 于 2010-3-18 17:29 编辑 ]
作者: BatCoder 时间: 2010-3-18 15:26
- sed -i "$!N;s/\n//;s/;$//" a.txt
复制代码
作者: xlkindy 时间: 2010-3-18 15:39
谢谢楼上~
用sed是可以实现。
有无不使用sed,而直接使用for来实现的方法?
作者: BatCoder 时间: 2010-3-18 15:43
“不使用中间文件”是指直接对原文件进行修改,不生成任何新的文件吗?
作者: xlkindy 时间: 2010-3-18 15:44
对,就是指在更改文本内容的过程中不产生任何的临时文件,直接在目标文本文件中进行调整。
作者: xlkindy 时间: 2010-3-18 15:49
另外,对于原始文件的内容,如果希望进行下面的改变,该如何实现:
字符串1;字符串2
字符串2;字符串3
字符串3;字符串4
字符串4;字符串5
用sed或用for都可以。
作者: BatCoder 时间: 2010-3-18 15:50
非常遗憾,没有哪个命令可以直接更改原始文件,都是通过临时文件来实现的,sed也不例外。
作者: xlkindy 时间: 2010-3-18 15:53
嗯。我也自己做了几次尝试,确实如此。
那请教一下,像上面提到的第二种调整方式,如果用sed的话该如何实现呢?
作者: FOR 时间: 2010-3-18 17:23
直接修改源文件,注意备份。
未考虑文件内容含!符号的情况。- @echo off&set /a flag=0,n=0
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in (a.txt) do (
- set /a n+=1
- set num=!num!%%i
- if !n! equ 2 (
- set /a n=0
- if !flag! equ 0 (
- set flag=2
- >a.txt echo !num:~0,-1!
- ) else (>>a.txt echo !num:~0,-1!)
- set "num="
- )
- )
- start a.txt
复制代码
第二个问题- @echo off&set /a flag=0,n=0
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in (a.txt) do (
- set /a n+=1
- set num=!num!%%i
- if !n! equ 2 (
- set /a n=1
- if !flag! equ 0 (
- set flag=2
- >a.txt echo !num:~0,-1!
- ) else (>>a.txt echo !num:~0,-1!)
- set "num=%%i"
- )
- )
- start a.txt
复制代码
作者: xlkindy 时间: 2010-3-18 17:28
多谢指教,受益多多~!
作者: BatCoder 时间: 2010-3-18 17:44
这个所谓“直接修改源文件”的方案存在重大bug,建议谨慎使用,以免造成不必要的数据损失。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |