中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何一次查找多串字符是否存在一个文件内
作者:
标题: 如何一次查找多串字符是否存在一个文件内 上一主题 | 下一主题
zerocq
中级用户




积分 458
发帖 196
注册 2006-10-5
状态 离线
『楼 主』:  如何一次查找多串字符是否存在一个文件内

有N个字符作为特征码

某文件内可能含有这N个字符,如何判断文件内是否出现这些字符中的"任意一个"

逐个"find 字符 文件"太慢了,如果特征码太多速度很慢

sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d test.txt&& echo %time%
命令可以一次查找多个字符,但返回的结果无法判定是否包含字符
如果文件不包含这些字符也会一样显示%time%,该怎么写呢

还有别的工具能实现这个功能吗:)

2007-10-16 22:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  

下面放搜索的字串
sed.ini:

  Quote:
AAA
BBB
CCC


findstr /g:sed.ini YourFileToSearch


2007-10-16 23:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 3 楼』:  


@echo off&setlocal EnableDelayedExpansion
set xs=0
set "var=sed -e "{s/aaa//;s/bbb//;s/ccc//g}" a.txt"
for /f "tokens=1* delims=:" %%a in ('findstr /n .* a.txt') do set num%%a=%%b
for /f "delims=" %%a in ('%var%') do (
  set /a str+=1
  call set uew=%%num!str!%%
  if "!uew!"=="%%a" set /a xs=1
)
echo 共有 !xs! 行含有指定字符.
pause




致精致简!
2007-10-16 23:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zerocq
中级用户




积分 458
发帖 196
注册 2006-10-5
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by lxmxn at 2007-10-16 23:26:
下面放搜索的字串
sed.ini:
findstr /g:sed.ini YourFileToSearch

sed.ini只放一行内容有效

多行无效??

2007-10-17 00:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zerocq
中级用户




积分 458
发帖 196
注册 2006-10-5
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by 26933062 at 2007-10-16 23:55:
[code]
@echo off&setlocal EnableDelayedExpansion
set xs=0
set "var=sed -e "{s/aaa//;s/bbb//;s/ccc//g}" a.txt"
for /f "tokens=1* delims=:" %%a in ('findstr /n . ...

只能统计第一个特征码,文件中包含bbb/ccc无法统计出来:o

2007-10-17 00:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 6 楼』:  

看来只有运行3次sed了.不知道效率如何
每次替换一种字符.



致精致简!
2007-10-17 01:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by zerocq at 2007-10-17 00:27:


sed.ini只放一行内容有效

多行无效??

我测试多行有效。
G:\>type sed.ini
perl
sed
first

G:\>type test.txt
this is a perl test
something to use sed
www.cn-dos.net/forum
my first important filter is the Great GNU sed
javascript

G:\>findstr /g:sed.ini test.txt
this is a perl test
something to use sed
my first important filter is the Great GNU sed

G:\>


[ Last edited by lxmxn on 2007-10-17 at 01:48 AM ]

2007-10-17 01:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zerocq
中级用户




积分 458
发帖 196
注册 2006-10-5
状态 离线
『第 8 楼』:  

请问版主用的是什么操作系统??

2007-10-19 00:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zerocq
中级用户




积分 458
发帖 196
注册 2006-10-5
状态 离线
『第 9 楼』:  

问题已搞定,可以结贴了

用egrep.exe可以支持同时搜索多个字符,用|来分隔字符

而且正常返回%errorlevel%

2007-10-19 01:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 10 楼』:  

我的OS是Windows XP。

2007-10-19 17:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: