ใน Powershell ฉันจะแสดงรายการไฟล์ทั้งหมดในไดเรกทอรี (วนซ้ำ) ที่มีข้อความที่ตรงกับ regex ที่กำหนดได้อย่างไร ไฟล์ที่สงสัยนั้นมีข้อความที่เข้าใจยากยาวมากดังนั้นฉันไม่ต้องการเห็นบรรทัดที่ตรงกัน - เพียงชื่อไฟล์
ใน Powershell ฉันจะแสดงรายการไฟล์ทั้งหมดในไดเรกทอรี (วนซ้ำ) ที่มีข้อความที่ตรงกับ regex ที่กำหนดได้อย่างไร ไฟล์ที่สงสัยนั้นมีข้อความที่เข้าใจยากยาวมากดังนั้นฉันไม่ต้องการเห็นบรรทัดที่ตรงกัน - เพียงชื่อไฟล์
คำตอบ:
คุณสามารถใช้Select-String
เพื่อค้นหาข้อความภายในไฟล์และSelect-Object
เพื่อส่งคืนคุณสมบัติเฉพาะสำหรับการแข่งขันแต่ละรายการ บางสิ่งเช่นนี้
Get-ChildItem -Recurse *.* | Select-String -Pattern "foobar" | Select-Object -Unique Path
หรือรุ่นที่สั้นกว่าโดยใช้นามแฝง:
dir -recurse *.* | sls -pattern "foobar" | select -unique path
หากคุณต้องการเพียงชื่อไฟล์ที่ไม่เส้นทางเต็มแทนที่ด้วยPath
Filename
Get-ChildItem
-Recurse *.*
ส่งคืนไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันและไดเรกทอรีย่อยทั้งหมด
Select-String
-Pattern "foobar"
ค้นหาไฟล์เหล่านั้นเพื่อหารูปแบบ "foobar" ที่กำหนด
Select-Object
-Unique Path
ส่งคืนเฉพาะพา ธ ไฟล์สำหรับแต่ละคู่ที่ตรงกัน -Unique
ซ้ำกันกำจัดพารามิเตอร์
โปรดทราบว่าใน powershell v1.0 และ v2.0 คุณต้องระบุพารามิเตอร์ตำแหน่งแรก (เส้นทาง) เพื่อทำงานกับ -Recursion
-Recurse
รับไอเท็มในตำแหน่งที่ระบุและในไอเท็มลูกทั้งหมดของตำแหน่ง
ใน Windows PowerShell 2.0 และ Windows PowerShell เวอร์ชันก่อนหน้าพารามิเตอร์ Recurse จะทำงานเฉพาะเมื่อค่าของพารามิเตอร์ Path เป็นคอนเทนเนอร์ที่มีรายการย่อยเช่น C: \ Windows หรือ C: \ Windows * และไม่ใช่เมื่อ รายการไม่มีรายการลูกเช่น C: \ Windows * .exe
ใช้คำสั่งด้านล่างในไดเรกทอรีที่คุณต้องการดำเนินการ "grep" และเปลี่ยน[SEARCH_PATTERN]
ให้ตรงกับสิ่งที่คุณต้องการจับคู่ มันวนซ้ำค้นหาไฟล์ทั้งหมดในไดเรกทอรี
dir -Recurse | Select-String - pattern [SEARCH_PATTERN]
Select-Stringมี-List
พารามิเตอร์สำหรับจุดประสงค์นี้:
ส่งคืนเฉพาะคู่แรกในไฟล์อินพุตแต่ละไฟล์ ตามค่าเริ่มต้น Select-String จะส่งคืนวัตถุ MatchInfo สำหรับการแข่งขันแต่ละครั้งที่พบ
- ss64.com
คุณสามารถใช้สิ่งนี้:
gci -Recurse | sls -List FOOBAR
นี่คือตัวอย่างผลลัพธ์ที่มีลักษณะเหมือน (ค้นหา Windows SDK สำหรับERROR_SUCCESS
):
shared\bthdef.h:576:#define BTH_ERROR(_btStatus) ((_btStatus) != BTH_ERROR_SUCCESS)
shared\netioapi.h:2254: ERROR_SUCCESS on success. WIN32 error code on error.
shared\rpcnterr.h:34:#define RPC_S_OK ERROR_SUCCESS
shared\winerror.h:214:// MessageId: ERROR_SUCCESS
um\advpub.h:40:// ERROR_SUCCESS_REBOOT_REQUIRED Reboot required.
um\bluetoothapis.h:243:// ERROR_SUCCESS
um\ClusApi.h:571:_Success_(return == ERROR_SUCCESS)
um\dsparse.h:102:_Success_(return == ERROR_SUCCESS)
um\eapmethodpeerapis.h:228:// If the function succeeds, it returns ERROR_SUCCESS. Otherwise, it is
um\eappapis.h:56:// If the functions succeed, they return ERROR_SUCCESS. Otherwise, it is
um\MapiUnicodeHelp.h:583: if ((hkeyPolicy && RegQueryValueExW(hkeyPolicy, szName, 0, &dwType, (LPBYTE)
&dwLcid, &dwSize) == ERROR_SUCCESS && dwType == REG_DWORD) ||
um\Mddefw.h:127: routine will return ERROR_SUCCESS and the inherited data even if
um\Msi.h:1693:// Returns ERROR_SUCCESS if file is a package.
um\MsiQuery.h:192:// Returns ERROR_SUCCESS if successful, and the view handle is returned,
um\msports.h:46: ERROR_SUCCESS if the dialog was shown
um\ncryptprotect.h:164: ERROR_SUCCESS
um\NTMSAPI.h:1761:_Success_ (return == ERROR_SUCCESS)
um\oemupgex.h:108:// Returns: ERROR_SUCCESS in case of success, win32 error otherwise
um\PatchWiz.h:90:// ERROR_SUCCESS, plus ERROR_PCW_* that are listed in constants.h.
um\Pdh.h:415:_Success_(return == ERROR_SUCCESS)
หากคุณต้องการเรียกคืนFileInfo
วัตถุจริง(แทน Path ที่สัมพันธ์กันและผลลัพธ์การจับคู่เดี่ยว) คุณอาจใช้สิ่งนี้:
Get-ChildItem -Recurse -File | where { Select-String -Path $_ -List -Pattern FOOBAR }
select -Unique
... เจ๋งเรียนรู้สิ่งใหม่ มันใช้งานได้ดีมากขอบคุณ!