中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: 查找带有空格的字符串 上一主题 | 下一主题
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『楼 主』:  查找带有空格的字符串

findstr "%abc%" "test.txt">"查到的号.txt" 我要查找的变量%abc%是这样的类型: " 7777" "7777 " 即数字前面或后面有个空格.要求查找时满足条件要求,严格匹配,举个例: 查找" 7777" *正确的搜索结果为: 7777183 7777254 *不正确的结果是(上面代码搜出来就是这样): 7777183 7777254 3577776 4777724 ...... (7777前面必须带有一个空格的指令没被接受,只含7777在中间的也出来了) 大虾帮改正下,感谢!!


2008-10-4 13:35
查看资料  发短消息  网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 2 楼』:  

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/F:file] [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]] strings [[drive:][path]filename[ ...]] /B 在一行的开始配对模式。
加上 /B 参数,就只匹配开头为 7777 的行。


2008-10-4 14:40
查看资料  发短消息  网志   编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 3 楼』:  

Originally posted by tireless at 2008-10-4 14:40: 加上 /B 参数,就只匹配开头为 7777 的行。
测试好象不能通过.. 假如还要找在后面甚至在中间的,有个通用的法子吗? [ Last edited by ka56 on 2008-10-4 at 14:50 ]


2008-10-4 14:47
查看资料  发短消息  网志   编辑帖子  回复  引用回复
bel87
新手上路





积分 2
发帖 1
注册 2008-10-4
状态 离线
『第 4 楼』:  [原创]WOW05



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





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 5 楼』:  

Originally posted by ka56 at 2008-10-4 01:35 PM: *正确的搜索结果为: 7777183 7777254
上看下看左看右看,还是没有看到“正确的搜索结果”中什么地方有空格,被论坛过滤掉了? 不知道是不是这个意思:
findstr /c:" 7777" a.txt




2008-10-4 15:28
查看资料  发短消息  网志   编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 6 楼』:  

Originally posted by HAT at 2008-10-4 15:28: 上看下看左看右看,还是没有看到“正确的搜索结果”中什么地方有空格,被论坛过滤掉了? 不知道是不是这个意思:
findstr /c:" 7777" a.txt
被过滤了,变量是随机,所以有点麻烦~~


2008-10-4 15:49
查看资料  发短消息  网志   编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 7 楼』:  

最大的特点是,字符串的前面或后面有一个空格.


2008-10-4 16:02
查看资料  发短消息  网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 8 楼』:  

开头:
for %%a in (" 7777" "^7777") do findstr /r /c:%%a test.txt>>查到的号.txt
结尾:
for %%a in ("7777 " "7777$") do findstr /r /c:%%a test.txt>>查到的号.txt
中间...(办法比较笨)
for /f "tokens=*" %%a in ('findstr /v /r /c:"7777 " test.txt^|findstr /v /r /c:"7777$"^|findstr /v /r /c:" 7777"^|findstr /v /r /c:"^7777"') do echo %%a>>查到的号.txt
[ Last edited by tireless on 2008-10-4 at 17:28 ]


2008-10-4 16:20
查看资料  发短消息  网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 9 楼』:  

@echo off
for /f "delims=" %%a in (test.txt) do (
      for /f "tokens=*" %%i in ("%%a") do (
           if "%%a" neq "%%i" echo %%a
))
pause




心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-10-4 16:28
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 10 楼』:  

Originally posted by tireless at 2008-10-4 16:20: 开头:
for %%a in (" 7777" "^7777") do findstr /r /c:%%a test.txt>>查到的号.txt
结尾: [code]for %%a in ("7777 " "7777$") do fi ...
结尾的可以找出来,开头的不行,,


2008-10-4 17:17
查看资料  发短消息  网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 11 楼』:  

Originally posted by ka56 at 2008-10-4 05:17 PM: 结尾的可以找出来,开头的不行,,
我测试没有问题。
@echo off
echo 开头:
for %%a in (" 7777" "^7777") do findstr /r /c:%%a test.txt
echo.
echo 结尾:&pause
for %%a in ("7777 " "7777$") do findstr /r /c:%%a test.txt
echo.
echo 中间:&pause
for /f %%a in ('findstr /v /r /c:"7777 " test.txt^|findstr /v /r /c:"7777$"^|findstr /v /r /c:" 7777"^|findstr /v /r /c:"^7777"') do echo %%a
pause


2008-10-4 17:47
查看资料  发短消息  网志   编辑帖子  回复  引用回复
zqz0012005
中级用户




积分 297
发帖 135
注册 2006-10-21
状态 离线
『第 12 楼』:  

只能怪findstr的正则太肉了,遇到空格就傻眼。 那就查找2次吧
for /f "delims=" %%a in ('findstr /i /c:" 7777" a.txt ^& findstr /i /c:"7777 " a.txt') do echo %%a




2008-10-4 17:49
查看资料  发短消息  网志  OICQ (411976538)  编辑帖子  回复  引用回复
ceii
初级用户





积分 115
发帖 45
注册 2007-3-3
状态 离线
『第 13 楼』:  

Originally posted by zqz0012005 at 2008-10-4 05:49 PM: 只能怪findstr的正则太肉了,遇到空格就傻眼。 那就查找2次吧 [code]for /f "delims=" %%a in ('findstr /i /c:" 7777" a.txt ^& findstr /i /c:"7777 & ...
对!还是linux工具好,sed和grep都正常: sed -n "/^ 7777/p" test.txt grep "^ 7777" test.txt 不过以下语句好象也可以。 findstr /rc:"^ 7777" test.txt


2008-10-4 17:57
查看资料  发短消息  网志   编辑帖子  回复  引用回复
zqz0012005
中级用户




积分 297
发帖 135
注册 2006-10-21
状态 离线
『第 14 楼』:  Re 13楼

我要查找的变量%abc%是这样的类型: " 7777" "7777 " 即数字前面或后面有个空格.要求查找时满足条件要求,严格匹配
你这个只能查找开头是空格接着是7777的字符串,没理解楼主的要求




2008-10-4 18:10
查看资料  发短消息  网志  OICQ (411976538)  编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 15 楼』:  

Originally posted by zqz0012005 at 2008-10-4 18:10: 你这个只能查找开头是空格接着是7777的字符串,没理解楼主的要求
开头是空格接着是7777的字符串 这个我是用一个变量,试了几个虾虾的代码都找不出来,邪门了.... @echo off @echo WScript.StdOut.Write(new ActiveXObject('htmlfile').parentWindow.clipboardData.getData('text'))> tmp.js 2>nul @for /f "delims=" %%a in ('cscript //Nologo tmp.js') do @set ClipboardText=%%a >nul 2>nul @del tmp.js /f /q >nul 2>nul @echo %ClipboardText% findstr "%ClipboardText%" "用来查找的文档.txt">"查到的号.txt" type 查到的号.txt| clip 这是我原来的代码. 用来查找的文档.txt的格式:(每行的开头结尾都有个空格) 77773050 77775081 15686081 29682122 30290010 31481070 37887777 37890100 37897777 45089031 45980031 --------------------------------------------------- 思路:我只要先复制"7777",运行批处理,就能把" 7777"开头和"7777 "结尾的四个号都搜出来了... 根据tireless兄的代码,我整理如下: @echo off @echo WScript.StdOut.Write(new ActiveXObject('htmlfile').parentWindow.clipboardData.getData('text'))> tmp.js 2>nul @for /f "delims=" %%a in ('cscript //Nologo tmp.js') do @set ClipboardText=%%a >nul 2>nul @del tmp.js /f /q >nul 2>nul @echo %ClipboardText% for %%g in (" %ClipboardText%" "^ %ClipboardText%") do findstr /rc:%%g 用来查找的文档.txt>"查到的号.txt" for %%b in ("%ClipboardText%$") do findstr /r /c:%%b 用来查找的文档.txt>>"查到的号.txt" type 查到的号.txt| clip 但只能找出结尾的出来: 37887777 37897777 哪位大虾再帮我指教下.... [ Last edited by ka56 on 2008-10-4 at 18:29 ]


2008-10-4 18:27
查看资料  发短消息  网志   编辑帖子  回复  引用回复

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


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



论坛跳转: