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 นี้พร้อมตัวอย่างบางส่วน
