Board logo

标题: [文本处理] 批处理如何删除文本中的指定字符串? [打印本页]

作者: 新手    时间: 2013-1-5 21:30     标题: 批处理如何删除文本中的指定字符串?

本帖最后由 新手 于 2013-1-7 16:21 编辑

现有文本文件1.txt  
内容为:
showLog=显示日志
properties=[
expires=[164]过期
notAvailable=不可用
noUser=[166]= 没有用户 =
favorites=收藏夹
defaultLanguage=]
key.ctrl=[99993]Ctrl
key.cmd=[99994]Cmd
query=[20123631]查询
wikiPage=[20123633]Wiki页面

方括号[] 中内容都是数字,长度不等。
现要求将方括号[]之间的内容,连同方括号同时删除,如 “query=[20123631]查询” 变成 “query=查询”。
有请各位高手解决?谢谢了。
忘记说了,是在windows 环境下
作者: BAT-VBS    时间: 2013-1-6 14:42

  1. sed "s/\[.*\]//" a.txt >b.txt
复制代码

作者: BAT-VBS    时间: 2013-1-6 14:44

  1. sed "s/\[.*\]\|\[\|\]//" a.txt >c.txt
复制代码

作者: 新手    时间: 2013-1-7 16:10

谢谢解答,不过没有成功,提示
sed 不是内部命令或外部命令,也不是可执行程序或批处理命令
作者: BAT-VBS    时间: 2013-1-7 17:31

回复 4# 新手


http://www.bathome.net/thread-16975-1-1.html
作者: hankerer    时间: 2013-1-7 18:15

fr test.txt /r:"[\d*]" -t:"[]"

http://baiy.cn/utils/fr/index.htm
作者: 新手    时间: 2013-1-8 11:30

谢谢各位的回复,能否只使用 windows本身提供的命令来实现这一功能要求
作者: terse    时间: 2013-1-8 11:59

谢谢各位的回复,能否只使用 windows本身提供的命令来实现这一功能要求
新手 发表于 2013-1-8 11:30

好 那么这条 properties=[   是否变为     properties=
作者: 新手    时间: 2013-1-9 23:56

回复 8# terse
谢谢你的回复,只删除同时含有[ 、] 这一对字符串中的内容以及[、]本身,只含有[、]之一的则不变。
作者: poter    时间: 2013-1-10 10:58

本帖最后由 poter 于 2013-1-10 11:11 编辑

用VBS的话就很简单了,用BAT的话想不出有什么更简单的,把123.txt改成你自己的文本名字吧
  1. @echo off
  2. setlocal enableDelayedExpansion
  3. for /f %%i in (123.txt) do (
  4. set /a a+=1
  5. set a!a!=!a!:%%i
  6. )
  7. set a=
  8. for /f %%j in ('findstr /n "[[][0-9]" 123.txt') do (
  9. set str=%%j&set str=!str:[= !&set str=!str:]= !
  10. for /f "tokens=1,3,4 delims= " %%k in ("!str!") do (
  11. set str1=%%k%%l%%m
  12. set count=%%k%%l%%m&set count=!count::= !
  13. for /f "delims= " %%l in ("!count!") do (
  14. set count1=%%l
  15. set a!count1!=!str1!
  16. )
  17. )
  18. )
  19. for /f %%z in (123.txt) do (
  20. set /a a+=1
  21. call set str1=%%a!a!%%&set str1=!str1::= !
  22. for /f "tokens=2 delims= " %%q in ("!str1!") do (
  23. echo %%q
  24. )
  25. )>>$
  26. move /y $ 123.txt
复制代码

作者: terse    时间: 2013-1-10 12:53

不处理特殊字符的话 这样简单
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (test.txt) do (
  3.     set "str=%%i"
  4.     set "s1=!str:*]=!"
  5.     set "s2=!str:*[=!"
  6.     if "!s1!" neq "!s2!" if "!s1!" neq "" if "!s2!" neq "" (
  7.         for /f "tokens=1,3 delims=[]" %%a in ("!str!") do set "str=%%a%%b"
  8.     )
  9.      echo !str!
  10. )
  11. pause
复制代码

作者: poter    时间: 2013-1-10 13:05

VBS的有正则,条理清晰多了
  1. option explicit
  2. dim fso, class1, class2, exp, a
  3. set fso = createobject("scripting.filesystemobject")
  4. set class1 = fso.opentextfile("123.txt")
  5. write(func1(class1.readall))
  6. class1.close
  7. function func1(str)
  8. set exp = new regexp
  9. exp.pattern = "[[][0-9]*[]]"
  10. exp.global = true
  11. func1 = exp.replace(str, "")
  12. end function
  13. function write(str)
  14. set class2 = fso.opentextfile("123.txt", 2)
  15. class2.write str
  16. class2.close
  17. end function
复制代码

作者: terse    时间: 2013-1-10 13:08

不处理特殊情况 再简化下
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (test.txt) do (
  3.     set str=%%i
  4.     for /f "tokens=1-3 delims=[]" %%a in ("%%i") do (
  5.         if "%%c" neq "" set str=%%a%%c
  6.     )
  7.         echo !str!
  8. )
  9. pause
复制代码

作者: 新手    时间: 2013-1-11 00:22

谢谢各位热心高手的回复,尤其是高手 terse,真心感谢你,你的方法很实用,能够详细对每句进行详细解释就更好了。
作者: 新手    时间: 2013-1-11 00:35

回复 13# terse


命令执行后,有时怎么会显示“  ECHO 处于关闭状态。”的提示?
请问如何解决这一问题?
作者: mikezunya    时间: 2013-8-8 16:01

为什么用这个执行后生成的txt内容为空 3# BAT-VBS




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