Melakukan perbandingan logis ATAU dengan findstr.exe


11

Ini mungkin pertanyaan bodoh, tetapi bahkan setelah membaca dokumentasi saya masih tidak yakin bagaimana menemukan semua baris dalam file yang mengandung ".cpp" atau ".h".

Apakah ada cara untuk melakukan itu?

Misalnya (tidak berfungsi):

findstr /i .cpp,.h // , == OR

Jawaban:


9

Cobalah ini, harus bekerja untuk Anda.

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

Bungkus keduanya dalam tanda kutip dan pisahkan dengan spasi. Catatan, Anda juga harus melarikan diri. di keduanya.


4

Jika Anda perlu memasukkan frasa (kata-kata yang dipisahkan spasi) Anda dapat melakukannya:

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

Atau jika Anda mendapatkan beberapa baris yang tidak diinginkan, Anda dapat mengecualikannya menggunakan /vparameter juga:

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

(Menguji ini pada Windows 7 dan Windows 10)


Catatan, Untuk memproses Set Data Besar secara efisien, lebih baik untuk menghindari perintah FindStr kedua bila memungkinkan, atau untuk mengurangi baris yang diumpankan ke sana jika tidak. Ini dimungkinkan ketika istilah yang akan dikecualikan tumpang tindih dalam beberapa cara dengan persyaratan yang akan disertakan dengan menggunakan Perbandingan Regex disederhanakan yang ditawarkan oleh perintah FindStr. Dalam contoh yang diberikan pencocokan "Driver" tetapi tidak termasuk "DriverS" memiliki potensi untuk menjadi lebih cepat pada dataset besar dengan mengurangi garis yang diteruskan ke FindStr kedua untuk mengevaluasi. yaituFindStr /I /R /C:"Hosted" /C:"Version /C:"Driver[^S]" | FindStr /v /i /c:"Native"
Ben Personick

Juga, jika Anda mengetahui dataset khusus Anda dengan cukup baik, Anda mungkin sudah tahu bahwa sebagian besar istilah yang ingin Anda kecualikan dari sebagian besar dataset Anda, maka akan bermanfaat jika menempatkan pernyataan pengecualian terlebih dahulu yaituFindStr /V /I /C:"Native" /C:"Drivers" | FindStr /I /R /C:"Hosted" /C:"Version /C:"Driver"
Ben Personick

0

Bagaimana Anda membentuk ORlogika tergantung pada apa yang Anda cari dan perubahan Anda di masa mendatang, jika berlaku.

Jika daftar kueri yang tidak memiliki spasi putih di dalamnya, Anda bisa melakukannya seperti ini, cepat & kotor:

findstr "thing1 thing2 thing3 thing4 thing5" dan jika ada hal-hal itu ada, itu akan mengevaluasi ke true dan keluar 0.

Jika yang Anda cari memiliki spasi putih, Anda harus menggunakan findstrstring pencarian literal dengan /c:""tipe parameter. Anda masih bisa menggunakan tipe parameter ini jika tidak ada spasi.

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

Namun , Anda tidak dapat menggabungkan literal dengan cepat & kotor . Misalnya, ini tidak akan berfungsi:

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

Anda harus mengubah parameter sebelumnya menjadi parameter literal, seperti:

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

Karena itu, ini merupakan praktik yang lebih baik untuk menggunakan opsi literal karena akan lebih baik skala dengan skrip dinamis. Namun jika itu hanya seperangkat kueri statis yang tidak memiliki spasi putih, cara cepat & kotor sudah cukup.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.