Fazendo comparações lógicas OU com o findstr.exe

10

Essa pode ser uma pergunta estúpida, mas mesmo depois de ler a documentação , ainda não sei como encontrar todas as linhas em um arquivo que contenha ".cpp" ou ".h".

Existe uma maneira de fazer isso?

Por exemplo (não funciona):

findstr /i .cpp,.h // , == OR
Thomas Bonini
fonte

Respostas:

8

Dê uma chance, deve funcionar para você.

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

Coloque ambas as aspas e separe-as com um espaço. Observe que você também precisa escapar do. em ambos.

squillman
fonte
4

Se você precisar incluir frases (palavras separadas por espaço), faça isso:

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

Ou, se você estiver obtendo algumas linhas indesejadas, poderá excluí-las usando o /vparâmetro também:

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

(Testado no Windows 7 e Windows 10)

Elysch
fonte
Nota: Para o processamento eficiente de grandes conjuntos de dados, é preferível evitar o segundo comando FindStr quando possível ou reduzir as linhas que estão sendo alimentadas quando não. Isso é possível quando os termos a serem excluídos se sobrepõem de alguma forma aos termos a serem incluídos usando as Comparações simplificadas de Regex oferecidas pelo comando FindStr. No exemplo dado correspondente a "Driver", mas a exclusão de "DriverS" tem o potencial de ser mais rápido em grandes conjuntos de dados, reduzindo as linhas passadas para o segundo FindStr para avaliar. isto é,FindStr /I /R /C:"Hosted" /C:"Version /C:"Driver[^S]" | FindStr /v /i /c:"Native"
Ben Personick
Além disso, se você conhece bem o seu conjunto de dados em particular, você já deve saber que a maioria dos termos que você deseja excluir são responsáveis ​​pela maior parte do seu conjunto de dados, então pode ser benéfico colocar as instruções de exclusão primeiro, isto éFindStr /V /I /C:"Native" /C:"Drivers" | FindStr /I /R /C:"Hosted" /C:"Version /C:"Driver"
Ben Personick
0

Como você forma a ORlógica depende do que você está procurando e das mudanças futuras previstas, se aplicável.

Se for uma lista de consultas que não possuem espaços em branco, basta fazer o seguinte, rápido e sujo:

findstr "thing1 thing2 thing3 thing4 thing5" e se alguma dessas coisas estiver presente, ela será avaliada como verdadeira e sairá de 0.

Se o que você está procurando tem espaço em branco, é necessário usar findstras cadeias de pesquisa literais com o /c:""tipo de parâmetro. Você ainda pode usar esse tipo de parâmetro se não houver espaço em branco.

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

No entanto , você não pode combinar literal com rápido e sujo . Por exemplo, isso não funcionará:

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

Você precisaria converter os parâmetros anteriores em parâmetros literais, assim:

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

Por esse motivo, é uma prática melhor usar a opção literal, pois ela será melhor dimensionada com scripts dinâmicos. No entanto, se for apenas um conjunto estático de consultas sem espaço em branco, a maneira rápida e suja deve ser suficiente.

kayleeFrye_onDeck
fonte