Powershell 2 แช่แข็งบน Select-String“. * _. * = - 1”


1

สิ่งนี้อาจดูเหมือนโง่ Q แต่ฉันมีปัญหา PS: เช่นชื่อกล่าวว่าฉันลองบางสิ่งเช่น:

 $all = gci D:\work\
 $all | Select-String ".*_.*=-1"

(ฉันกำลังมองหาตัวเลือกการกำหนดค่าที่มีค่า -1 และ _ ในชื่อ) ปัญหาคือ PS หยุดทำงานหรือไม่ทำงานในเวลาที่เหมาะสม ctrl + c ไม่ทำงาน Ofc คุณสามารถพูดได้ว่าข้อมูลเป็นสิ่งที่มากสำหรับการประมวลผล แต่ปัญหาคือ grep ใช้เวลาประมาณ 1-2 วินาทีในโฟลเดอร์เดียวกันและ regex เดียวกัน

คำสั่ง Grep คือ (แต่เดิมมันไม่มี -r แต่ฉันเพิ่มเข้าไปหลังจากคอมเม้นท์บางอย่าง grep ยังเร็ว แต่ใช้เวลา 20-30 วินาที)

grep ".*_.*=-1" -r D:\work\*

แก้ไข:

$all  | ForEach-Object {echo $_.Name;  $_|Select-String ".*_.*=-1"      }

แสดงชื่อไฟล์ช้า ... ฉันเดาว่าปัญหาคือความเร็ว Regex ใน PS น่าสงสาร ...


คุณช่วยแสดงคำสั่ง grep แบบเต็มได้เช่นกัน
bbaja42

ฉันทำได้และฉันทำได้ :)
NoSenseEtAl

คำตอบ:


1

เจาะจง:
ลองปรับแต่ง regex ให้เป็น

 [^_]*_[^=]*=-1

grep เทียบเท่ารุ่น:

grep -P '[^_]*_[^=]*=-1'

ทั่วไป:
การใช้งาน regex แตกต่างกันดังนั้นจึงเป็นเหตุผลสำหรับพฤติกรรมที่แตกต่างกัน ฉันไม่ทราบรายละเอียดเกี่ยวกับการใช้ PowerShell regex ดังนั้นฉันจึงไม่ทราบสาเหตุที่แน่นอน


ความหมายของ regex เหมือนกันสำหรับตัวอย่างของฉัน (ใน grep และ PS)
NoSenseEtAl

ฉันไม่รู้ grep เป็นมากกว่า 1 ไวยากรณ์การแสดงออกปกติ รุ่นปกติรุ่นขยายและ Perl ฉันไม่ได้มีประสบการณ์กับรุ่น PS
bbaja42

btw มันยังคงค้าง
NoSenseEtAl

คุณสามารถให้รายละเอียดเพิ่มเติมเกี่ยวกับตัวอย่างข้อมูลเช่นขนาดเป็น MB ได้หรือไม่
bbaja42

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