Risposte:
Il -Pattern
parametro in Select-String
supporta una serie di modelli. Quindi quello che stai cercando è:
Get-Content .\doc.txt | Select-String -Pattern (Get-Content .\regex.txt)
Questo cerca nel file doc.txt
di testo usando ogni regex (uno per riga) inregex.txt
PS) new-alias grep findstr
PS) C:\WINDOWS> ls | grep -I -N exe
105:-a--- 2006-11-02 13:34 49680 twunk_16.exe
106:-a--- 2006-11-02 13:34 31232 twunk_32.exe
109:-a--- 2006-09-18 23:43 256192 winhelp.exe
110:-a--- 2006-11-02 10:45 9216 winhlp32.exe
PS) grep /?
findstr
funziona come grep
su Linux. Select-String
è ottimo per lavorare con gli oggetti, ma a volte vuoi solo abbinare le stringhe.
findstr
non è nativo di PowerShell, ma Prompt dei comandi.
Non ho familiarità con grep ma con Select-String puoi fare:
Get-ChildItem filename.txt | Select-String -Pattern <regexPattern>
Puoi farlo anche con Get-Content:
(Get-Content filename.txt) -match 'pattern'
dir *.cs -Recurse | sls "TODO" | select -Unique "Path"
. Grazie per l'eccellente puntatore.
Quindi ho trovato una risposta abbastanza buona a questo link: https://www.thomasmaurer.ch/2011/03/powershell-search-for-string-or-grep-for-powershell/
Ma essenzialmente è:
Select-String -Path "C:\file\Path\*.txt" -Pattern "^Enter REGEX Here$"
Questo fornisce una ricerca di file di directory (* o puoi semplicemente specificare un file) e una ricerca di contenuti di file in un'unica riga di PowerShell, molto simile a grep. L'output sarà simile a:
doc.txt:31: Enter REGEX Here
HelloWorld.txt:13: Enter REGEX Here
Questa domanda ha già una risposta, ma voglio solo aggiungere che in Windows esiste il sottosistema Windows per Linux WSL .
Ad esempio, se si desidera verificare se si dispone di un servizio denominato Elasicsearch in stato di esecuzione, è possibile eseguire operazioni come lo snippet di seguito in PowerShell
net start | grep Elasticsearch
Ho avuto lo stesso problema cercando di trovare testo nei file con PowerShell. Ho usato quanto segue - per stare il più vicino possibile all'ambiente Linux.
Spero che questo aiuti qualcuno:
PowerShell:
PS) new-alias grep findstr
PS) ls -r *.txt | cat | grep "some random string"
Spiegazione:
ls - lists all files
-r - recursively (in all files and folders and subfolders)
*.txt - only .txt files
| - pipe the (ls) results to next command (cat)
cat - show contents of files comming from (ls)
| - pipe the (cat) results to next command (grep)
grep - search contents from (cat) for "some random string" (alias to findstr)
Sì, funziona anche questo:
PS) ls -r *.txt | cat | findstr "some random string"
ma select-String non sembra avere questa opzione.
Corretta. PowerShell non è un clone del set di strumenti di shell * nix.
Tuttavia non è difficile costruire qualcosa di simile da soli:
$regexes = Get-Content RegexFile.txt |
Foreach-Object { new-object System.Text.RegularExpressions.Regex $_ }
$fileList | Get-Content | Where-Object {
foreach ($r in $regexes) {
if ($r.IsMatch($_)) {
$true
break
}
}
$false
}
Select-String -Pattern somestring
è molto più pulito