使用findstr.exe进行逻辑或比较


Answers:


9

试试看,应该为您工作。

findstr /i "\.cpp \.h" myfile.txt

用引号引起来,并用空格分隔。请注意,您还必须转义。在他们两个。


4

如果您需要包括短语(以空格分隔的单词),则可以执行以下操作:

findstr /i /c:"IBSS" /c:"WDI Version" /c:"Soft Ap"

或者,如果您得到一些不需要的行,也可以使用/v参数将它们排除:

findstr /i /c:Hosted /c:Version /c:Driver | findstr /v /i /c:drivers /c:native

(在Windows 7和Windows 10上进行了测试)


注意,为了有效地处理大型数据集,在可能的情况下避免使用第二个FindStr命令,或者在不使用时减少输入的行数。通过使用FindStr命令提供的简化的Regex比较,可以排除的术语在某种程度上与要包含的术语重叠。在示例中,给定匹配的“ Driver”但不包括“ DriverS”,通过减少传递给第二个FindStr进行评估的行,可以在大型数据集上更快。即FindStr /I /R /C:"Hosted" /C:"Version /C:"Driver[^S]" | FindStr /v /i /c:"Native"
Ben Personick

另外,如果您对特定数据集的了解足够多,则可能已经知道您希望排除的大多数术语都占了数据集的大部分,那么将排除语句放在第一位可能是有益的,即FindStr /V /I /C:"Native" /C:"Drivers" | FindStr /I /R /C:"Hosted" /C:"Version /C:"Driver"
Ben Personick

0

形成OR逻辑的方式取决于您要寻找的内容以及预期的未来更改(如果适用)。

如果这是其中没有空格的查询列表,则可以这样做,既快捷又肮脏:

findstr "thing1 thing2 thing3 thing4 thing5" 并且如果存在任何这些东西,它将评估为true并退出0。

如果您要查找的内容确实包含空格,则必须将findstr的文字搜索字符串与/c:""参数类型一起使用。如果没有空格,您仍然可以使用这种类型的参数。

/C:string Uses specified string as a literal search string.

但是您不能将文字与快速而肮脏的内容相结合。例如,这将不起作用:

findstr "thing1 thing2" /c:"thing3 thingy"

您需要将早期的参数转换为文字参数,如下所示:

findstr /c:"thing1" /c:"thing2" /c:"thing3 thingy"

因此,使用文字选项是一种更好的做法,因为它可以在动态脚本中更好地扩展。但是,如果它只是一组没有空格的静态查询,那么快速而肮脏的方式就足够了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.