Findstr:在txt文件文件夹中搜索字符串列表
Posted
技术标签:
【中文标题】Findstr:在txt文件文件夹中搜索字符串列表【英文标题】:Findstr: Search list of strings in folder of txt files 【发布时间】:2018-11-27 13:48:42 【问题描述】:我正在尝试使用 FINDSTR 搜索一个充满文本文件的文件夹,使用字符串文本文件,然后输出到 results.txt
字符串文本文件包含 3,200 行,每行包含一个作者姓名和相关的书名。例子:
George Orwell 1984
H. G. Wells War of the Worlds
Isaac Asimov I, Robot
我还有一个文件夹,其中包含十几个电子书文件名的文本列表(有些列表超过 50 万行。),例如:
George Orwell - 1984 (epub).rar
H G Wells - War of the Worlds (pdf).rar
Isaac Asimov - [Robot 0.1] - I, Robot (Mobi).rar
我需要在文件名的文本文件中搜索 3,200 个作者和标题,并将结果输出到第三个文本列表。
文件名还包含其他内容,如系列信息、格式等,因此我正在寻找任何包含这些作者姓名和标题但与搜索字符串不完全匹配的行,如我上面的示例所示。
这是我尝试过的。它可以匹配确切的字符串,但我看不到如何让它找到包含其他内容的文件名以及搜索字符串中的所有单词。
findstr /g:C:\strings.txt *.txt >>C:\results.txt
谁能帮我写代码。谢谢。
【问题讨论】:
你的方法行不通。默认情况下 findstr 是基于正则表达式的,其中每个带有空格的搜索都是 ORed。所以George Orwell 1984
将匹配当前.txt 文件中包含George
或Orwell
或1984
的任何行。 Stack Overflow 也不是免费的脚本编写服务。展示您自己的编码尝试,我们或许能够查明您的错误并引导您找到解决方案。
findstr
不能进行近似搜索,所以如果没有一个搜索字符串(作者和标题)完全匹配(除此之外),应该如何查找文件?也许您调整列表文件C:\strings.txt
并在之后进行搜索...
LotPings,如果你真的阅读了我的帖子,你会看到我确实发布了我自己的编码......
【参考方案1】:
由于strings.txt
中的字符串在 *.txt 文件中不存在 1:1,因此在文件中查找需要正则表达式搜索。
需要将strings.txt
中的字符串从
George Orwell 1984
H. G. Wells War of the Worlds
Isaac Asimov I, Robot
到
George.*Orwell.*1984
H.*G.*Wells.*War.*of.*the.*Worlds
Isaac.*Asimov.*I.*Robot
这可以通过在支持 Perl 正则表达式的文本编辑器中打开 strings.txt
并从文件顶部运行 Perl 正则表达式替换所有搜索字符串 [^\w\r\n]+
并替换字符串 .*
来完成。搜索表达式会搜索一个或多个不是单词字符、回车符或换行符的字符。
那么就可以使用了:
findstr /I /R /G:C:\Temp\strings.txt *.txt >>C:\Temp\results.txt
strings.txt
和 results.txt
不应位于包含 FINDSTR 搜索的 *.txt 文件的当前目录中,或者这两个文件使用的文件扩展名与 .txt
不同。
【讨论】:
以上是关于Findstr:在txt文件文件夹中搜索字符串列表的主要内容,如果未能解决你的问题,请参考以下文章