我正在尝试仅通过cmd返回包含匹配文本的行的结果。
在这种情况下,该行必须匹配"名称"和"姓氏"。
阅读http://ss64.com/nt/findstr.html,然后尝试了第一个例子
找到"詹姆斯亨利" sam.txt> sam2.txt
不幸的是,这也会返回包含詹姆斯和亨利的所有行。只有包含"詹姆斯"和"亨利"应该退还。
应返回的示例行
詹姆斯埃德加亨利228559不应返回的示例行
詹姆斯彼得斯148825任何帮助表示赞赏
答案 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;