标题: [文本处理] 【集思】批处理去除文本中每行末尾的空格 [打印本页]
作者: defanive 时间: 2011-8-20 04:00 标题: 【集思】批处理去除文本中每行末尾的空格
来自群里,感觉是个很不错的问题
作者: defanive 时间: 2011-8-20 04:01
本帖最后由 defanive 于 2011-8-20 04:02 编辑
- @echo off
- cls 1>nul 3>>b.txt
- for /f "delims=" %%a in (a.txt) do call :a ^^%%a
- goto :eof
- :a
- echo\%*
复制代码
如果不考虑特殊字符的话,这个方法应该不错
作者: CUer 时间: 2011-8-20 10:36
- sed "s/ *$//" a.txt >b.txt
复制代码
- gawk "gsub(/ *$/,\"\")" a.txt >b.txt
复制代码
- perl -pe "s/ *$//" a.txt >b.txt
复制代码
作者: batman 时间: 2011-8-20 11:32
这个问题原来讨论过吧?- @echo off
- rem 加上#字符是为了标示行尾
- for /f "delims=" %%a in (a.txt) do echo %%~na#
- pause>nul
复制代码
作者: defanive 时间: 2011-8-20 14:39
回复 4# batman
如果文本中有一行C:\a.txt就不行了吧
作者: CrLf 时间: 2011-8-20 14:50
回复 5# defanive
把 \ 替换掉就行了呗
作者: CrLf 时间: 2011-8-20 15:00
- @echo off
- for /f "delims=" %%a in (1.txt) do (
- set str=%%a
- setlocal enabledelayedexpansion
- for /f "delims=" %%b in ("!str:\=\!") do (
- endlocal
- set str=%%~nxb
- )
- setlocal enabledelayedexpansion
- echo !str:\=\!
- endlocal
- )
复制代码
作者: defanive 时间: 2011-8-20 15:05
回复 7# CrLf
貌似测试C:\a.txt会把C:吃掉。。。而且这样搞效率感觉会比不上2L的样子
作者: Hello123World 时间: 2011-8-20 15:10
完成4楼的- @echo off
- rem 加上#字符是为了标示行尾
- (for /f "delims=" %%a in (a.txt) do echo %%~na#)>1.txt
- (For /f "delims=#" %%i in (1.txt) do echo %%i)>b.txt
- pause>nul
复制代码
作者: CrLf 时间: 2011-8-20 15:13
回复 8# defanive
哦,那就再替换掉 : 即可。效率方面,call 远低于 for、setlocal、set、echo等普通命令- @echo off
- for /f "delims=" %%a in (1.txt) do (
- set str=%%a
- setlocal enabledelayedexpansion
- set str=!str::=:!
- for /f "delims=" %%b in ("!str:\=\!") do (
- endlocal
- set str=%%~nxb
- )
- setlocal enabledelayedexpansion
- set str=!str::=:!
- echo !str:\=\!
- endlocal
- )
- pause
复制代码
作者: Hello123World 时间: 2011-8-20 15:13
回复 2# defanive
能讲下为什么要两次转义^^%%a吗?
作者: Hello123World 时间: 2011-8-20 15:33
回复 12# else
原来如此!soga
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |