Board logo

标题: [文本处理] 如何替换掉指定字符串之后的内容? [打印本页]

作者: hjh22222    时间: 2016-4-6 10:18     标题: 如何替换掉指定字符串之后的内容?

本帖最后由 pcl_test 于 2016-4-6 22:48 编辑

例如文件A.txt内容有多行,其中有三行分别为:

CurrentGroup=AAAA
CurrentServer=BBBB
CurrentLine=CCCC
AAAA、BBBB、CCCC内容及长度都不固定,
如何把CurrentGroup=    CurrentServer=    CurrentLine=这三个字符串后的不固定内容分别替换成EEE、FFF、GGG

求高手指点一下,万分感谢!!!
作者: codegay    时间: 2016-4-6 10:20

找资料学正则表达式。
作者: happy886rr    时间: 2016-4-6 11:31

  1. @echo off
  2. (for /f "delims=" %%a in ('type "A.txt"^|findstr /n .*') do (
  3. set "str=%%a"
  4. setlocal enabledelayedexpansion
  5. set "str=!str:*:=!"
  6. if "!str:~0,13!"=="CurrentGroup=" (
  7. echo CurrentGroup=EEE
  8. ) else (
  9. if "!str:~0,14!"=="CurrentServer=" (
  10. echo CurrentServer=FFF
  11. ) else (
  12. if "!str:~0,12!"=="CurrentLine=" (
  13. echo CurrentLine=GGG
  14. ) else (
  15. echo;!str!
  16. )
  17. )
  18. )
  19. endlocal
  20. ))>$
  21. move $ A.txt
复制代码
回复 1# hjh22222
作者: pcl_test    时间: 2016-4-6 23:56

第三方
  1. sed -i -r -e "s/^([ \t]*CurrentGroup=).+/\1eee/;s/^([ \t]*CurrentServer=).+/\1fff/;s/^([ \t]*CurrentLine=).+/\1ggg/" a.txt
复制代码

作者: codegay    时间: 2016-4-7 00:45

  1. fr -ric:"(CurrentGroup=).*" -t:"\1aaaa" a.txt
复制代码

作者: CrLf    时间: 2016-4-7 00:49

本帖最后由 CrLf 于 2016-4-7 01:42 编辑

暴力解1:
  1. @echo off
  2. for /f "delims==" %%a in ('set') do set "%%a="
  3. set CurrentGroup=AAAA
  4. set CurrentServer=BBBB
  5. set CurrentLine=CCCC
  6. (for /f "delims=" %%a in (a.txt) do (
  7.    for /f "delims==" %%b in ("%%a") do (
  8.       if defined #%%b (set %%b) else echo %%a
  9.    )
  10. ))>b.txt
  11. pause
复制代码
暴力解2:
  1. @echo off
  2. (for /f "tokens=1* delims==" %%a in (a.txt) do (
  3. set "name=%%b"
  4. set "%%a=%%b"
  5. set CurrentGroup=AAAA
  6. set CurrentServer=BBBB
  7. set CurrentLine=CCCC
  8. setlocal enabledelayedexpansion
  9. echo !name!=!%%a!
  10. endlocal
  11. ))>b.txt
  12. pause
复制代码





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