Board logo

标题: 查找带有空格的字符串 [打印本页]

作者: ka56     时间: 2008-10-4 13:35    标题: 查找带有空格的字符串
findstr "%abc%" "test.txt">"查到的号.txt"

我要查找的变量%abc%是这样的类型:
" 7777"
"7777 "
即数字前面或后面有个空格.要求查找时满足条件要求,严格匹配,举个例:
查找" 7777"

*正确的搜索结果为:
7777183
7777254

*不正确的结果是(上面代码搜出来就是这样):

7777183
7777254
3577776
4777724
......
(7777前面必须带有一个空格的指令没被接受,只含7777在中间的也出来了)

大虾帮改正下,感谢!!

作者: tireless     时间: 2008-10-4 14:40
FINDSTR
]
strings filename]

/B 在一行的开始配对模式。

加上 /B 参数,就只匹配开头为 7777 的行。

作者: ka56     时间: 2008-10-4 14:47
Originally posted by tireless at 2008-10-4 14:40:

加上 /B 参数,就只匹配开头为 7777 的行。

测试好象不能通过..
假如还要找在后面甚至在中间的,有个通用的法子吗?<img src="images/smilies/face-smile-big.png" align="absmiddle" border="0">

Last edited by ka56 on 2008-10-4 at 14:50 ]

作者: bel87     时间: 2008-10-4 15:22    标题: [原创]WOW05

作者: HAT     时间: 2008-10-4 15:28
Originally posted by ka56 at 2008-10-4 01:35 PM:
*正确的搜索结果为:
7777183
7777254

上看下看左看右看,还是没有看到“正确的搜索结果”中什么地方有空格,被论坛过滤掉了?
不知道是不是这个意思:
findstr /c:" 7777" a.txt

作者: ka56     时间: 2008-10-4 15:49
Originally posted by HAT at 2008-10-4 15:28:

上看下看左看右看,还是没有看到“正确的搜索结果”中什么地方有空格,被论坛过滤掉了?
不知道是不是这个意思:
findstr /c:" 7777" a.txt


被过滤了,变量是随机,所以有点麻烦~~

作者: ka56     时间: 2008-10-4 16:02
最大的特点是,字符串的前面或后面有一个空格.

作者: tireless     时间: 2008-10-4 16:20
开头:
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 ]

作者: pusofalse     时间: 2008-10-4 16:28
@echo off
for /f "delims=" %%a in (test.txt) do (
for /f "tokens=*" %%i in ("%%a") do (
if "%%a" neq "%%i" echo %%a
))
pause

作者: ka56     时间: 2008-10-4 17:17
Originally posted by tireless at 2008-10-4 16:20:
开头:
for %%a in (" 7777" "^7777") do findstr /r /c:%%a test.txt>>查到的号.txt


结尾:
for %%a in ("7777 " "7777$") do fi ... 


结尾的可以找出来,开头的不行,,

作者: tireless     时间: 2008-10-4 17:47
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

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

作者: ceii     时间: 2008-10-4 17:57
Originally posted by zqz0012005 at 2008-10-4 05:49 PM:
只能怪findstr的正则太肉了,遇到空格就傻眼。
那就查找2次吧
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

作者: zqz0012005     时间: 2008-10-4 18:10    标题: Re 13楼
我要查找的变量%abc%是这样的类型:
" 7777"
"7777 "
即数字前面或后面有个空格.要求查找时满足条件要求,严格匹配


你这个只能查找开头是空格接着是7777的字符串,没理解楼主的要求

作者: ka56     时间: 2008-10-4 18:27
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 ]

作者: ka56     时间: 2008-10-4 18:31
开头和结尾用一个空格是为了美观...

作者: ka56     时间: 2008-10-4 20:14
for %%g in (" %ClipboardText%" "^%ClipboardText%") do findstr /r /c:%%g 用来查找的文档.txt>"查到的号.txt"

这句无效,不会改了

作者: ceii     时间: 2008-10-4 21:00
Originally posted by ka56 at 2008-10-4 06:27 PM:
开头是空格接着是7777的字符串
这个我是用一个变量,试了几个虾虾的代码都找不出来,邪门了....

这个也不行?
findstr /rc:"^ 7777" test.txt

作者: ka56     时间: 2008-10-4 21:11
Originally posted by ceii at 2008-10-4 21:00:

这个也不行?
findstr /rc:"^ 7777" test.txt

findstr /rc:"^ %ClipboardText%" 用来查找的号文档.txt>>查到的号.txt

我换成这样,不行,呵呵

作者: ceii     时间: 2008-10-4 21:21
set ClipboardText=7777
findstr /rc:"^ %ClipboardText%" 用来查找的号文档.txt>>查到的号.txt

我试了也可以啊!

作者: ka56     时间: 2008-10-4 21:30
Originally posted by ceii at 2008-10-4 21:21:
set ClipboardText=7777
findstr /rc:"^ %ClipboardText%" 用来查找的号文档.txt>>查到的号.txt

我试了也可以啊!

把代码合在一起试下,有劳了!!
@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 /rc:"^ %ClipboardText%" 用来查找的号文档.txt>查到的号.txt
type 查到的号.txt| clip

作者: ceii     时间: 2008-10-4 22:01
你的代码前面几行在我的机子运行不正常。
echo %ClipboardText% 不能得到 7777 。
看来问题不在于 findstr,而是前面赋值就已经不正常。
你能确定 echo %ClipboardText% 的输出是 7777 吗?

作者: ka56     时间: 2008-10-4 22:10
Originally posted by ceii at 2008-10-4 22:01:
你的代码前面几行在我的机子运行不正常。
echo %ClipboardText% 不能得到 7777 。
看来问题不在于 findstr,而是前面赋值就已经不正常。
你能确定 echo %ClipboardText% 的输出是 7777 吗?

先复制"7777",运行后%ClipboardText%的输出是"7777",前面的代码不会错的

作者: ceii     时间: 2008-10-4 22:18
找到原因了,%ClipboardText% 的值是 7777 加空格,
想办法去掉 7777 后面的空格就行了。

作者: ceii     时间: 2008-10-4 22:20
修改前面的代码,加上以下语句应该可以了吧。
set ClipboardText=%ClipboardText: =%

作者: ceii     时间: 2008-10-4 22:29
再看了一下,简单地把以下语句
for /f "delims=" %%a in ('cscript //Nologo tmp.js') do @set ClipboardText=%%a >nul 2>nul
改成
for /f "delims=" %%a in ('cscript //Nologo tmp.js') do @set ClipboardText=%%a>nul 2>nul
就行了。

作者: ka56     时间: 2008-10-4 22:44
非常感谢ceii兄!!已经搞定~~
可用的代码确定:
@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%
cd.>查到的号.txt
findstr /rc:"^ %ClipboardText%" 用来查找的号文档.txt>>查到的号.txt
for %%b in ("%ClipboardText% $") do findstr /r /c:%%b 用来查找的号文档.txt>>查到的号.txt
type 查到的号.txt| clip
pause

作者: ness     时间: 2008-10-4 22:54
这样不行吗

@echo off
findstr /rc:" 7777" 7777.txt>77.txt
findstr /rc:"7777 " 7777.txt>>77.txt
pause