ค้นหาเว็บไซต์

PowerShell โดยที่วัตถุ regex [พร้อมตัวอย่าง]


ในบทช่วยสอน PowerShell นี้ ฉันจะพูดคุยทุกอย่างเกี่ยวกับ PowerShellwhere-object regex ฉันจะแสดงวิธีใช้ regex กับwhere-object ใน PowerShell พร้อมตัวอย่าง

หากต้องการใช้นิพจน์ทั่วไป (regex) กับ PowerShell Where-Object cmdlet คุณใช้ตัวดำเนินการ -match ภายในบล็อกสคริปต์เพื่อกรองวัตถุตามรูปแบบ regex ตัวอย่างเช่น หากต้องการค้นหาไฟล์ที่มีนามสกุล .txt คุณจะต้องใช้ Get-ChildItem | Where-Object { $_.Name -match '.txt$' } โดยที่ Get-ChildItem ดึงไฟล์และ Where-Object กรองไฟล์เหล่านั้นโดยใช้รูปแบบ regex ที่ตรงกับสตริงใดๆ ที่ลงท้ายด้วย .txt

PowerShell โดยที่วัตถุ regex

cmdlet Where-Object ใน PowerShell ใช้เพื่อกรองออบเจ็กต์จากคอลเลกชันตามค่าคุณสมบัติ cmdlet นี้มักใช้ในไปป์ไลน์ โดยรับอินพุตจากคำสั่งก่อนหน้าและกรองออบเจ็กต์ตามเงื่อนไขบล็อกสคริปต์

เมื่อคุณต้องการกรองข้อความหรือสตริงตามรูปแบบ นิพจน์ทั่วไปภายในบล็อกสคริปต์ Where-Object จะมีประสิทธิภาพอย่างเหลือเชื่อ ตัวดำเนินการ -match มักใช้ภายในบล็อกสคริปต์เพื่อทดสอบออบเจ็กต์อินพุตแต่ละรายการกับรูปแบบ regex

ไวยากรณ์พื้นฐาน

ไวยากรณ์พื้นฐานสำหรับการใช้ regex กับ Where-Object มีลักษณะดังนี้

collection | Where-Object { $_ -match 'regexPattern' }

ในที่นี้ collection คือข้อมูลที่ป้อน $_ แสดงถึงออบเจ็กต์ปัจจุบันในไปป์ไลน์ และ 'regexPattern' คือนิพจน์ทั่วไปของคุณ

ตัวอย่างของ PowerShell โดยที่-วัตถุ regex

มาดูตัวอย่างที่เป็นประโยชน์เพื่อสาธิตการใช้ regex กับ Where-Object

ตัวอย่างที่ 1: การกรองชื่อไฟล์

ลองนึกภาพคุณมีไดเร็กทอรีของไฟล์ และต้องการกรองไฟล์ที่มีนามสกุลไฟล์เฉพาะออก เช่น .txt

Get-ChildItem -Path "C:\MyFolder\" -File | Where-Object { $_.Name -match '\.txt$' }

รูปแบบ regex '\.txt$' จะค้นหาสตริงที่ลงท้ายด้วย .txt เพื่อให้มั่นใจว่าคุณจะได้รับเฉพาะไฟล์ที่มีนามสกุลนั้นเท่านั้น

นี่คือผลลัพธ์ คุณสามารถดูภาพหน้าจอด้านล่าง:

ตัวอย่างที่ 2: การตรวจสอบที่อยู่อีเมล

สมมติว่าคุณมีรายการที่อยู่อีเมล และต้องการค้นหาที่อยู่อีเมลที่มีรูปแบบไม่ถูกต้อง

$emails | Where-Object { $_ -notmatch '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' }

รูปแบบ regex ที่นี่เป็นรูปแบบทั่วไปสำหรับการจับคู่ที่อยู่อีเมล และใช้โอเปอเรเตอร์ -notmatch เพื่อกรองรายการที่ไม่สอดคล้องกับรูปแบบออก

ตัวอย่างที่ 3: การค้นหาที่อยู่ IP

หากคุณมีไฟล์บันทึกและต้องการแยกบรรทัดที่มีที่อยู่ IP คุณสามารถใช้คำสั่งต่อไปนี้:

Get-Content log.txt | Where-Object { $_ -match '\b\d{1,3}(\.\d{1,3}){3}\b' }

รูปแบบ regex '\b\d{1,3}(\.\d{1,3}){3}\b' ได้รับการออกแบบมาให้ตรงกับรูปแบบทั่วไปของที่อยู่ IP

บทสรุป

นิพจน์ทั่วไปเป็นเครื่องมือที่มีประสิทธิภาพในการประมวลผลข้อความ และเมื่อรวมกับ cmdlet Where-Object ของ PowerShell นิพจน์เหล่านี้จะยิ่งมีประสิทธิภาพมากยิ่งขึ้น ไม่ว่าคุณจะกรองชื่อไฟล์ ตรวจสอบข้อมูล หรือค้นหาในบันทึก การทำความเข้าใจวิธีใช้ regex กับ Where-Object จะช่วยเพิ่มความสามารถในการเขียนสคริปต์ PowerShell ได้อย่างมาก

ฉันได้อธิบายวิธีใช้ PowerShell โดยที่-วัตถุ regex ในบทช่วยสอน PowerShell นี้พร้อมตัวอย่างบางส่วน

บทความที่เกี่ยวข้อง