标题: 请教: 如何用批处理删除文本文件中以指定字符开始的行?
[打印本页]
作者: lianjiang2004
时间: 2006-12-18 04:45
标题: 请教: 如何用批处理删除文本文件中以指定字符开始的行?
请教: 如何用批处理删除文本文件中以指定字符开始的行?
比如想删除1.txt中以aaa空格“aaa ”为开始的行。谢谢?
作者: vkill
时间: 2006-12-18 05:11
copy 1.txt 2.txt
sed "/^aaa /d" 2.txt|more>1.txt
del 2.txt
作者: yardian
时间: 2006-12-18 05:15
http://www.cn-dos.net/forum/view ... highlight=%E2%80%9C
http://www.cn-dos.net/forum/view ... 2%E5%AD%97%E7%AC%A6
帮你找了两老贴,看看吧
作者: namejm
时间: 2006-12-18 05:26
若要考虑特殊字符,可以使用下面的演示代码(但是就无法避免在每行的首位都要加引号):
@echo off
for /f "delims=" %%i in ('findstr /n .* 1.txt') do call :intercept "%%i☆"
pause
goto :eof
:intercept
set str=%1
set "str=%str:~1,-1%"
set "str=%str:*:=%"
if not "%str:~0,4%"=="aaa " echo "%str:~0,-1%"
goto :eof
若无须考虑连接符号,则可以使用如下演示代码:
@echo off
for /f "delims=" %%i in ('findstr /n .* 1.txt') do call :intercept "%%i☆"
pause
goto :eof
:intercept
set str=%1
set str=%str:~1,-1%
set str=%str:*:=%
if not "%str:~0,4%"=="aaa " echo.%str:~0,-1%
goto :eof
以上代码不直接用 delims=: 是为了防止行首的冒号被抛弃;用 findstr /n .* 的格式是为了不忽略以分号开头的行;给 %%i 加引号是为了对付空格,在 %%i 后加星号,是为了对付空行;第二段代码用 echo 后加了一个点号,也是为了对付空行。总之,用 for 语句处理文本要注意的事项比较多,可视具体文本增删语句的某些部分。
作者: lianjiang2004
时间: 2006-12-18 06:27
这段时间在这里得到了各位的大力帮助,谢谢各位了。
这几种代码都试了,好像都不行。
我要把aaa 开头的行,整行删除掉。
[
Last edited by lianjiang2004 on 2006-12-18 at 07:06 AM ]
作者: ccwan
时间: 2006-12-18 21:01
这可奇了。我试过vkill和namejm兄的代码后没有问题啊。确如楼主要求,去掉了aaa开头的行。
不如楼主将你测试用的文本内容贴上来,大家一起看看。
作者: 9527
时间: 2006-12-18 23:13
试试下面一句是否管用???
findstr /b /v /c:"aaa " test.txt
作者: lianjiang2004
时间: 2006-12-19 00:57
比如我想把下面文件中以rem 开头的行删除。
---------------
@Echo Off
Rem 第一次完成这段代码,不足和错误在所难免。
mode con: cols=76 lines=26
Set TT=WangZQ的 gghost 绿色备份恢复工具 卸载程序
COLOR 2F
TITLE %TT%
:uninstall0
echo.
echo 谢谢使用 gghost 绿色备份恢复工具 v2.0
echo =============================
echo.
echo 1. 卸载gghost后,自动恢复安装gghost到启动项
echo 所进行的文件修改,复原至原样。
echo.
Echo 2. 若设置了管理员密码,自动卸载需输入管理员密码。
echo.
pause
if %pwda%==0 goto uninstall
cls
Echo.
Echo.
Set /P unins_0=请先输入管理员密码:
If %unins_0%==%pwda% Goto uninstall
cls
Echo.
Echo Sorry! 管理员密码错误,不可自动卸载,按任意键结束 。。。
pause>nul
Goto Exit
:uninstall
cls
echo.
echo 正在卸载。。。
Rem 彻底清除本工具及自动生成的备用文件。
if exist c:\w_boot.ini goto sub_34a >nul
:sub_18d
[
Last edited by lianjiang2004 on 2006-12-19 at 07:21 AM ]
作者: namejm
时间: 2006-12-19 01:42
呵呵,还是 9527 兄的代码简洁,我绕了个大圈子了。
借用 9527 兄的代码,可以写成这样:
@echo off
findstr /b /i /v /c:"Rem " 1.txt>2.txt
start 2.txt
注意要加上参数 /i 来忽略大小写。
[
Last edited by namejm on 2006-12-18 at 12:46 PM ]
作者: lianjiang2004
时间: 2006-12-19 02:13
可以了,谢谢各位。