我想在批处理用正则表达式来做替换工作,现实吗?

联盟域名: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 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 ...