在file.txt

时间:2015-05-14 12:48:25

标签: batch-file cmd find findstr

我正在尝试仅通过cmd返回包含匹配文本的行的结果。

在这种情况下,该行必须匹配"名称"和"姓氏"。

阅读http://ss64.com/nt/findstr.html,然后尝试了第一个例子

找到"詹姆斯亨利" sam.txt> sam2.txt

不幸的是,这也会返回包含詹姆斯和亨利的所有行。只有包含"詹姆斯"和"亨利"应该退还。

应返回的示例行

詹姆斯埃德加亨利228559

不应返回的示例行

詹姆斯彼得斯148825

任何帮助表示赞赏

2 个答案:

答案 0 :(得分:1)

使用/C开关进行文字字符串搜索:

findstr /C:"James Henry" sam.txt >sam2.txt

如果您想要不敏感的搜索,也可能需要指定/I

findstr /?

中对此进行了描述
  

使用空格分隔多个搜索字符串,除非参数以/ C为前缀。例如,'FINDSTR "hello there" x.y'在文件x.y中搜索“hello”或“there”。 'FINDSTR /C:"hello there" x.y'在文件x.y中搜索“hello there”。

好的,在阅读修改后的问题之后,听起来你需要使用正则表达式:

findstr /R "James.*Henry" sam.txt >sam2.txt

如果您还需要找到像“Henry Tiberius James”这样的名字,那么我建议您使用搜索文件:

findstr /R /G:search.txt sam.txt >sam2.txt

search.txt为:

James.*Henry
Henry.*James

或使用更好的脚本语言,如PowerShell。

答案 1 :(得分:0)

如果你不能确定这两个词是否在一起或订单可能不确定,你必须分别搜索它们:

findstr /i "\<James\>" sam1.txt | findstr /i "\<Henry\>" sam2.txt

\<表示&#34;单词的开头&#34;,\>表示&#34;单词的结尾,所以你确定,不要找一个名为&#34的人; Henry Jamesson&#34;

相关问题