标题: [文本处理] 批处理如何将txt文件每行开头前4个字符替换成指定字符? [打印本页]
作者: 星空 时间: 2012-4-21 21:32 标题: 批处理如何将txt文件每行开头前4个字符替换成指定字符?
本帖最后由 pcl_test 于 2016-10-10 12:43 编辑
比如有一个文件里面是这样
XXXX111
XXXX222
XXXX333
我想将它转成这样:
A111
A222
A333
真心求教!
作者: gawk 时间: 2012-4-21 22:17
- sed "s/^..../A/" a.txt >b.txt
复制代码
作者: xiaopo 时间: 2012-4-21 22:43
俺是新手菜鸟,所以贴出俺的简陋代码,没有啥高深技术,但自己试验过了,可以达到楼主的要求。楼主试试吧。- @echo off & setlocal EnableDelayedExpansion
- for /f %%i in (a.txt) do (
- set a=%%i
- echo A!a:~4,3!>>b.txt
- )
- pause>nul
复制代码
作者: xiaopo 时间: 2012-4-21 22:46
不好意思,没看清要求,为了增强通用性,请把第四行代码中的",3”去掉,看准哦,前面有个逗号。
作者: gawk 时间: 2012-4-22 00:33
回复 4# xiaopo
你试试文件内容是这样的时候会如何:
XXXX!!!
XXXXon
XXXXoff
作者: canyuexiaolang 时间: 2012-4-22 08:35
- @echo off & setlocal EnableDelayedExpansion
- for /f "tokens=* delims=" %%i in (a.txt) do (
- set "n=%%i"
- call set "n=%%n:!n:~0,4!=A%%"
- echo.!n!
- )pause>null
复制代码
话说特殊字符。。。除了叹号。。。
作者: apang 时间: 2012-4-22 18:53
要考虑特殊字符,setlocal enabledelayedexpansion貌似不能放在开头- @echo off
- (for /f "delims=" %%a in (a.txt) do (
- set "str=%%a"
- setlocal enabledelayedexpansion
- echo A!str:~4!
- endlocal
- ))>b.txt
复制代码
作者: xiaopo 时间: 2012-4-22 19:30
回复 7# apang
敢问,这个位置为什么会影响感叹号的输出,能否详细介绍下?
作者: apang 时间: 2012-4-22 21:47
回复 8# xiaopo
如果在set "str=%%a"之前开启变量延迟,%%a所包含的感叹号会被当成变量引用符号而被脱掉。
作者: xiaopo 时间: 2012-4-22 22:06
回复 9# apang
哦,原来是这样,多谢朋友,
作者: gawk 时间: 2012-4-22 22:49
回复 8# xiaopo
http://www.bathome.net/thread-1224-1-1.html
作者: xiaopo 时间: 2012-4-23 18:27
回复 11# gawk
多谢,善于运用论坛的搜索功能,学习了。
作者: yzlsc 时间: 2012-4-24 10:39
回复 7# apang
谢谢高手,又学了一招。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |