中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教: 如何用批处理删除文本文件中以指定字符开始的行?
作者:
标题: 请教: 如何用批处理删除文本文件中以指定字符开始的行? 上一主题 | 下一主题
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『楼 主』:  请教: 如何用批处理删除文本文件中以指定字符开始的行?

请教: 如何用批处理删除文本文件中以指定字符开始的行?
比如想删除1.txt中以aaa空格“aaa ”为开始的行。谢谢?



Windows 一键还原
http://www.yjhy.com
2006-12-18 04:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 2 楼』:  

copy 1.txt 2.txt
sed "/^aaa /d" 2.txt|more>1.txt
del 2.txt

2006-12-18 05:11
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
yardian
中级用户




积分 305
发帖 85
注册 2005-5-23
状态 离线
『第 3 楼』:  

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
帮你找了两老贴,看看吧

2006-12-18 05:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 4 楼』:  

  若要考虑特殊字符,可以使用下面的演示代码(但是就无法避免在每行的首位都要加引号):
@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 语句处理文本要注意的事项比较多,可视具体文本增删语句的某些部分。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-12-18 05:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 5 楼』:  

这段时间在这里得到了各位的大力帮助,谢谢各位了。

这几种代码都试了,好像都不行。
我要把aaa 开头的行,整行删除掉。

[ Last edited by lianjiang2004 on 2006-12-18 at 07:06 AM ]



Windows 一键还原
http://www.yjhy.com
2006-12-18 06:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 6 楼』:  

这可奇了。我试过vkill和namejm兄的代码后没有问题啊。确如楼主要求,去掉了aaa开头的行。
不如楼主将你测试用的文本内容贴上来,大家一起看看。



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2006-12-18 21:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
9527
银牌会员

努力做坏人


积分 1185
发帖 438
注册 2006-8-28
来自 北京
状态 离线
『第 7 楼』:  

试试下面一句是否管用???

findstr /b /v /c:"aaa " test.txt



我今后在论坛的目标就是做个超级坏人!!!
2006-12-18 23:13
查看资料  发短消息 网志  OICQ (329429)  编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 8 楼』:  

比如我想把下面文件中以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 ]



Windows 一键还原
http://www.yjhy.com
2006-12-19 00:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 9 楼』:  

  呵呵,还是 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 ]



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-12-19 01:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 10 楼』:  

可以了,谢谢各位。



Windows 一键还原
http://www.yjhy.com
2006-12-19 02:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: