标题: [文本处理] [已解决]批处理如何将文本里的指定标点符号/字符替换成回车换行符 [打印本页]
作者: kunlun621 时间: 2016-9-22 12:40 标题: [已解决]批处理如何将文本里的指定标点符号/字符替换成回车换行符
本帖最后由 pcl_test 于 2016-9-24 16:59 编辑
将文本内容从行转化为列
文本1.txt内容:
床前明月光,疑是地上霜。举头望明月,低头思故乡。
转化成如下格式:
床前明月光
疑是地上霜
举头望明月
低头思故乡
运行成功的代码如下:
@echo off
for /f "tokens=1 delims=,。" %%a in (1.txt) do (echo %%a >>2.txt
)
for /f "tokens=2 delims=,。" %%a in (1.txt) do (echo %%a >>2.txt
)
for /f "tokens=3 delims=,。" %%a in (1.txt) do (echo %%a >>2.txt
)
for /f "tokens=4 delims=,。" %%a in (1.txt) do (echo %%a >>2.txt
)
pause
问题一:怎样简化呢?上面代码要重复好几遍,太繁琐
问题二:上面的代码只能新建文本2.txt显示要转化的内容,能不能在1.txt中直接转化呢?
思路将%%a %%b %%c %%d返回的结果直接引用到下面的%%a中,再用tokens截取
问题代码如下:
@echo off
for /f "tokens=1,2,3,4 delims=。," %%a in (1.txt) do echo %%a %%b %%c %%d
for /f "tokens=1" %%a in do echo %%a >>1.txt
for /f "tokens=2" %%b in do echo %%a >>1.txt
for /f "tokens=3" %%c in do echo %%a >>1.txt
for /f "tokens=4" %%d in do echo %%a >>1.txt
pasue
从能看懂的代码开始的阅读评分,结果后面没分了 感谢各位的解答!
作者: codegay 时间: 2016-9-22 16:18
正则表达式替换,。 成回车换行符即可。
作者: happy886rr 时间: 2016-9-22 17:07
回复 1# kunlun621 - @echo off
- for /f "delims=" %%L in ('type 1.txt') do (
- set "line=%%L"
- setlocal enabledelayedexpansion
- set "line=!line:,=, !"
- set "line=!line:。=。 !"
- for %%l in (!line!) do (echo %%l)
- echo;&endlocal
- )
- pause>NUL
复制代码
作者: 523066680 时间: 2016-9-22 17:50
装一个- echo 床前明月光,疑是地上霜。举头望明月,低头思故乡。|perl -e "$_=<>; $_=~s/,|。/\n/g;print;"
复制代码
输出:
床前明月光
疑是地上霜
举头望明月
低头思故乡
作者: DiamondbacK 时间: 2016-9-22 18:19
本帖最后由 DiamondbacK 于 2016-9-22 19:47 编辑
- for /f "tokens=1,2,3,4 delims=,。?!" %%A in (1.txt) do (
- echo %%A
- echo %%B
- echo %%C
- echo %%D
- )
复制代码
- >con sed -r "s/[,。?!]+/\n/g" 1.txt
复制代码
- >con gawk -v RS=[,。?!] 1 1.txt
复制代码
- >con gawk "{ gsub(/[,。?!]/, \"\n\"); } 1" 1.txt
复制代码
- PowerShell -c "(Get-Content 1.txt) -replace '[,。?!]', \"`n\""
复制代码
作者: wskwfkbdn 时间: 2016-9-22 18:31
回复 4# 523066680
话说版主,尝试一下纯BAT解决一下。
作者: 523066680 时间: 2016-9-22 19:01
回复 6# wskwfkbdn
我会复制 happy886rr 的代码,粘贴。
作者: wskwfkbdn 时间: 2016-9-22 19:56
回复 7# 523066680
只能这样啦,set替换一下,然后for处理一次OK
作者: wskwfkbdn 时间: 2016-9-22 21:08
- @ECHO OFF & setlocal enabledelayedexpansion
- SET "aa=床前明月光,疑是地上霜。举头望明月,低头思故乡。"
- SET aa=!aa:,= !
- SET aa=!aa:。= !
- REM ECHO.!aa!!aa!
- FOR %%i IN (!aa!) DO ECHO.%%i
- pause
复制代码
作者: WHY 时间: 2016-9-22 21:16
- @echo off & setlocal enabledelayedexpansion
- set "s=床前明月光,疑是地上霜。举头望明月,低头思故乡。"
- set s=!s:。=^
-
- !
- echo;!s:,=^
-
- !
- pause
复制代码
- PowerShell -c "'床前明月光,疑是地上霜。举头望明月,低头思故乡。' -Split '[\p{P}]+'"
复制代码
作者: CrLf 时间: 2016-9-23 17:47
回复 10# WHY
加上回车符疗效更佳- @echo off & setlocal enabledelayedexpansion
- set "s=床前明月光,疑是地上霜。举头望明月,低头思故乡。"
- for /f %%D in ('copy /z %0 nul') do (
- set s=!s:。=%%D^
-
- !
- echo;!s:,=%%D^
-
- !
- )
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |