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

วิธีค้นหาสตริงในไฟล์ใน 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" -CaseSensitive

3. ค้นหาสตริงในไฟล์ใน 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 พร้อมด้วยตัวอย่างและสคริปต์

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