ทำตรรกะหรือเปรียบเทียบกับ findstr.exe


11

นี่อาจเป็นคำถามที่โง่ แต่หลังจากอ่านเอกสารฉันยังไม่แน่ใจว่าจะหาบรรทัดทั้งหมดในไฟล์ที่มี ".cpp" หรือ ".h" ได้อย่างไร

มีวิธีทำเช่นนั้นหรือไม่?

ตัวอย่าง (ไม่ทำงาน):

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

คำตอบ:


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 ที่สองเมื่อเป็นไปได้หรือเพื่อลดบรรทัดที่ป้อนเข้าเมื่อไม่ได้ นี่เป็นไปได้ที่คำศัพท์ที่จะถูกทับซ้อนทับในบางด้านกับข้อกำหนดที่จะรวมโดยใช้การเปรียบเทียบ Regex แบบง่าย ๆ ที่เสนอโดยคำสั่ง FindStr ในตัวอย่างที่ให้การจับคู่ "ไดรเวอร์" แต่ไม่รวม "ไดรเวอร์" มีศักยภาพที่จะเร็วขึ้นในชุดข้อมูลขนาดใหญ่โดยการลดบรรทัดที่ส่งผ่านไปยัง FindStr ที่สองเพื่อประเมิน ieFindStr /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" และหากมีสิ่งเหล่านี้อยู่ก็จะประเมินเป็นจริงและออกจาก 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"

ด้วยเหตุนี้จึงเป็นวิธีปฏิบัติที่ดีกว่าในการใช้ตัวเลือกตามตัวอักษรเพราะมันจะขยายขนาดได้ดีขึ้นด้วยสคริปต์แบบไดนามิก อย่างไรก็ตามหากเป็นเพียงชุดข้อความค้นหาที่ไม่มีช่องว่างวิธีที่รวดเร็วและสกปรกน่าจะพอเพียง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.