联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!
Originally posted by pooronce at 2008-5-27 04:34 PM: 仅仅CMD自带的命令的话,不现实。目前所知,仅findstr能支持查找时的少数几个RE字符。 不过可以考虑移植一些win32下用的nix命令进来 比如sed gawk等
Originally posted by xipx at 2008-5-28 09:59 AM: 请问能通过findstr命令来替换文本吗?:(
Originally posted by HAT at 2008-5-28 10:05 AM: 把你的具体要求写出来,自然有人贴代码。
Originally posted by zw19750516 at 2008-5-28 10:24 AM: set str=%str:e-mail=%
替换所有e-mail格式的字符串 abc@163.com acro@hotmail.com war@74y.com www.baidu.com @time
@echo off&setlocal enabledelayedexpansion for /f "delims=" %%i in (a.txt) do ( set str=%%i if "%%~xi"==".com" ( if "!str:@=!"=="!str!" ( echo %%i ) else ( echo. ) ) else ( echo %%i ) ) pause
替换所有e-mail格式的字符串为www.cn-dos.net ping /n 2 127.1 abc@163.com tracert acro@hotmail.com /n war@74y.com netstat www.baidu.com begin @time 12345@qq.com
@echo off&setlocal enabledelayedexpansion for /f "delims=" %%i in (a.txt) do ( set str=%%i if "!str:@=!"=="!str!" ( echo %%i ) else ( if "!str:.com=!"=="!str!" ( echo %%i ) else ( call :lp echo !var:~1!&set var= ) ) ) pause>nul&goto :eof :lp for %%i in (%str%) do ( set a=%%i if not "!a:@=!"=="!a!" set a=www.cn-dos.net set var=!var! !a! )
@echo off&setlocal enabledelayedexpansion for /f "tokens=1* delims=:" %%a in ('findstr /in "..*@..*.com" a.txt') do set _%%a=a for /f "tokens=1* delims=:" %%a in ('findstr /n .* a.txt') do ( set "str=%%b" if defined _%%a ( for %%i in (!str!) do ( set "a=%%i" if not "!a:@=!"=="!a!" set a=www.cn-dos.net set var=!var! !a! ) echo !var! ) else echo %%b set "var=" ) pause
Originally posted by 26933062 at 2008-5-28 01:06 PM: 不太同意12楼的说法,首先,findstr并不是如你所说的那样效率低下, 做个测试。 假设a.txt内容有一万行,而e-mail格式的行只有10行,现要求显示含e-m ...