วิธีค้นหาสตริงในไฟล์ใน PowerShell
หากคุณกำลังทำงานกับสตริงใน PowerShell บทช่วยสอนนี้จะช่วยคุณได้ ในบทช่วยสอน PowerShell นี้ เราจะสำรวจวิธีการต่างๆ เพื่อค้นหาสตริงในไฟล์โดยใช้ PowerShell
หากต้องการค้นหาสตริงในไฟล์โดยใช้ PowerShell คุณสามารถใช้ Select-String cmdlet ซึ่งคล้ายกับ grep ใน Unix/Linux ตัวอย่างเช่น Select-String -Path “C:\MyFolder\file.txt” -Pattern “your-search-string” จะค้นหา “your-search-string” ในไฟล์ที่ระบุ คุณยังสามารถค้นหาไฟล์และไดเรกทอรีต่างๆ ได้โดยการรวม Get-ChildItem เข้ากับ Select-String และใช้สวิตช์ -CaseSensitive หรือ -NotMatch เพื่อการค้นหาที่ละเอียดยิ่งขึ้น
1. ค้นหาสตริงอย่างง่ายด้วย Select-String ใน PowerShell
Select-String cmdlet เป็นคำสั่ง go-to สำหรับค้นหาสตริงในไฟล์ด้วย PowerShell คล้ายกับ grep ในระบบ Unix/Linux และสามารถใช้ค้นหาภายในไฟล์เดียวหรือหลายไฟล์ได้
นี่คือตัวอย่างที่สมบูรณ์:
Select-String -Path "C:\Logs\example.log" -Pattern "Error"คำสั่งนี้ค้นหาสตริง “ข้อผิดพลาด” ในไฟล์ example.log โดยจะส่งคืนแต่ละบรรทัดจากไฟล์ที่พบสตริง พร้อมด้วยหมายเลขบรรทัด
ค้นหาสตริงในหลายไฟล์โดยใช้ PowerShell
หากคุณต้องการค้นหาสตริงในหลายไฟล์ใน PowerShell คุณสามารถใช้ PowerShell cmdlet ด้านล่าง
Get-ChildItem -Path "C:\Logs\" -Recurse | Select-String -Pattern "Error"สคริปต์นี้แสดงรายการไฟล์ทั้งหมดในไดเรกทอรี C:\Logs\ และไดเรกทอรีย่อย โดยค้นหาสตริง “ข้อผิดพลาด” ภายในแต่ละไฟล์
2. การค้นหาที่ไม่คำนึงถึงตัวพิมพ์ของ PowerShell String
ตามค่าเริ่มต้น Select-String จะไม่คำนึงถึงขนาดตัวพิมพ์ใน PowerShell อย่างไรก็ตาม หากคุณต้องการให้มีลักษณะการทำงานนี้ คุณสามารถใช้สวิตช์ -CaseSensitive ได้อย่างชัดเจน
นี่คือตัวอย่าง
Select-String -Path "C:\Logs\example.log" -Pattern "error" -CaseSensitive3. ค้นหาสตริงในไฟล์ใน PowerShell โดยใช้นิพจน์ทั่วไป
Select-String ของ PowerShell ยังสามารถใช้ประโยชน์จากนิพจน์ทั่วไป (regex) เพื่อค้นหารูปแบบภายในไฟล์ข้อความ นี่คือตัวอย่าง:
Select-String -Path "C:\Logs\example.log" -Pattern "4\d{2}" -AllMatchesสคริปต์นี้จะค้นหารหัสสถานะ HTTP 400-series ที่เกิดขึ้นทั้งหมดใน example.log
4. ค้นหาสตริงในไฟล์ขนาดใหญ่ใน PowerShell
สำหรับไฟล์ที่มีขนาดใหญ่มาก การอ่านไฟล์ทีละบรรทัดอาจมีประสิทธิภาพมากกว่า คุณสามารถใช้ Get-Content cmdlet พร้อมลูปเพื่อบรรลุเป้าหมายนี้
นี่คือตัวอย่าง
Get-Content "C:\Logs\largefile.log" | ForEach-Object {
if ($_ -match "Error") {
$_
}
}สคริปต์นี้จะอ่าน largefile.log ทีละบรรทัด ค้นหาสตริง “ข้อผิดพลาด” และส่งออกบรรทัดที่พบสตริง
5. การใช้ Where-Object สำหรับการกรองขั้นสูง
หากต้องการควบคุมการค้นหาสตริงใน PowerShell ได้มากขึ้น คุณสามารถไปป์เอาต์พุตของ Get-Content ไปที่ Where-Object นี่คือตัวอย่าง:
Get-Content "C:\Logs\example.log" | Where-Object { $_ -contains "Error" }
สคริปต์นี้คล้ายกับสคริปต์ก่อนหน้า แต่ใช้ -contains สำหรับการจับคู่สตริงโดยตรงแทนการจับคู่ regex
6. ค้นหาหลายสตริงในไฟล์ใน PowerShell
คุณสามารถค้นหาหลายสตริงได้โดยส่งอาร์เรย์ของสตริงไปยังพารามิเตอร์ -Pattern ในไฟล์ใน PowerShell
นี่คือตัวอย่าง:
$patterns = "Error", "Warning", "Critical"
Select-String -Path "C:\Logs\example.log" -Pattern $patternsสคริปต์นี้ค้นหาคำว่า "ข้อผิดพลาด" "คำเตือน" และ "สำคัญ" ใน example.log
7. การจับคู่แบบผกผัน
บางครั้ง คุณอาจต้องการค้นหาบรรทัดที่ไม่มีสตริงเฉพาะใน PowerShell สวิตช์ -NotMatch ช่วยให้คุณดำเนินการดังกล่าวได้
นี่คือตัวอย่าง
Select-String -Path "C:\Logs\example.log" -Pattern "Error" -NotMatchคำสั่งนี้ส่งคืนบรรทัดทั้งหมดจาก example.log ที่ไม่มีสตริง “Error”
ห่อขึ้น
หากคุณกำลังค้นหาข้อผิดพลาดในบันทึก ค้นหารายการข้อมูลเฉพาะ หรือการกรองข้อความ PowerShell มีวิธีการต่างๆ ในการค้นหาสตริงในไฟล์ใน PowerShell
ในบทช่วยสอนนี้ เราได้กล่าวถึงวิธีการต่างๆ เพื่อค้นหาสตริงในไฟล์โดยใช้ PowerShell พร้อมด้วยตัวอย่างและสคริปต์