标题: [文本处理] 批处理如何删除文本中的指定字符串? [打印本页]
作者: 新手 时间: 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
- sed "s/\[.*\]//" a.txt >b.txt
复制代码
作者: BAT-VBS 时间: 2013-1-6 14:44
- 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改成你自己的文本名字吧- @echo off
- setlocal enableDelayedExpansion
- for /f %%i in (123.txt) do (
- set /a a+=1
- set a!a!=!a!:%%i
- )
- set a=
- for /f %%j in ('findstr /n "[[][0-9]" 123.txt') do (
- set str=%%j&set str=!str:[= !&set str=!str:]= !
- for /f "tokens=1,3,4 delims= " %%k in ("!str!") do (
- set str1=%%k%%l%%m
- set count=%%k%%l%%m&set count=!count::= !
- for /f "delims= " %%l in ("!count!") do (
- set count1=%%l
- set a!count1!=!str1!
- )
- )
- )
-
- for /f %%z in (123.txt) do (
- set /a a+=1
- call set str1=%%a!a!%%&set str1=!str1::= !
- for /f "tokens=2 delims= " %%q in ("!str1!") do (
- echo %%q
- )
- )>>$
-
- move /y $ 123.txt
复制代码
作者: terse 时间: 2013-1-10 12:53
不处理特殊字符的话 这样简单- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in (test.txt) do (
- set "str=%%i"
- set "s1=!str:*]=!"
- set "s2=!str:*[=!"
- if "!s1!" neq "!s2!" if "!s1!" neq "" if "!s2!" neq "" (
- for /f "tokens=1,3 delims=[]" %%a in ("!str!") do set "str=%%a%%b"
- )
- echo !str!
- )
- pause
复制代码
作者: poter 时间: 2013-1-10 13:05
VBS的有正则,条理清晰多了- option explicit
- dim fso, class1, class2, exp, a
- set fso = createobject("scripting.filesystemobject")
- set class1 = fso.opentextfile("123.txt")
- write(func1(class1.readall))
- class1.close
-
- function func1(str)
- set exp = new regexp
- exp.pattern = "[[][0-9]*[]]"
- exp.global = true
- func1 = exp.replace(str, "")
- end function
-
- function write(str)
- set class2 = fso.opentextfile("123.txt", 2)
- class2.write str
- class2.close
- end function
复制代码
作者: terse 时间: 2013-1-10 13:08
不处理特殊情况 再简化下- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in (test.txt) do (
- set str=%%i
- for /f "tokens=1-3 delims=[]" %%a in ("%%i") do (
- if "%%c" neq "" set str=%%a%%c
- )
- echo !str!
- )
- 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 |