PowerShellのDOS FINDSTRに相当するものは何ですか?私は "ERROR"のためにたくさんのログファイルを検索する必要があります。ここでPowerShell FINDSTR eqivalent?
答えて
は、迅速な答え
Get-ChildItem -Recurse -Include *.log | select-string ERROR
は、私はそれを素晴らしい徹底的な答えを持っているhereを見つけたのです!
、このディレクトリ内のCファイルとすべてのサブディレクトリに「の#include」のすべてのインスタンスを検索する:チェックしてください。
gci -r -i *.c | select-string "#include"
GCIただMonroecheesemanの答えを拡張するには、Get-ChildItemコマンドレット
の別名です。 gciはGet-ChildItem(dirまたはlsと同等)のエイリアスです。-rスイッチは再帰的検索を行い、-iはインクルードを意味します。
select-stringにそのクエリの結果をパイプすると、各ファイルが読み込まれ、正規表現に一致する行が検索されます(この例ではERRORが指定されていますが、任意の.NET正規表現が使用できます)。
結果は、行の一致、ファイル、およびその他の関連情報を示す一致オブジェクトのコレクションになります。
関連するノートでは、特定の正規表現検索または文字列を含むすべてのファイルを一覧表示する検索を示します。それはいくつかの改善を使用することができますので、自由にそれに取り組む。また、誰かがそれを歓迎する関数にカプセル化したいと思った場合。
私はここにいるので、これが自分自身の話題になるなら、私に知らせてください。これはほとんど関係があるように見えるので、私は彼女にそれを置くと思った。
# Search in Files Script
# ---- Set these before you begin ----
$FolderToSearch="C:\" # UNC paths are ok, but remember you're mass reading file contents over the network
$Search="Looking For This" # accepts regex format
$IncludeSubfolders=$True #BUG: if this is set $False then $FileIncludeFilter must be "*" or you will always get 0 results
$AllMatches=$False
$FileIncludeFilter="*".split(",") # Restricting to specific file types is faster than excluding everything else
$FileExcludeFilter="*.exe,*.dll,*.wav,*.mp3,*.gif,*.jpg,*.png,*.ghs,*.rar,*.iso,*.zip,*.vmdk,*.dat,*.pst,*.gho".split(",")
# ---- Initialize ----
if ($AllMatches -eq $True) {[email protected]{AllMatches=$True}}
else {[email protected]{List=$True}}
if ($IncludeSubfolders -eq $True) {[email protected]{Recurse=$True}}
else {[email protected]{Recurse=$False}}
# ---- Build File List ----
#$Files=Get-Content -Path="$env:userprofile\Desktop\FileList.txt" # For searching a manual list of files
Write-Host "Building file list..." -NoNewline
$Files=Get-ChildItem -Include $FileIncludeFilter -Exclude $FileExcludeFilter -Path $FolderToSearch -ErrorAction silentlycontinue @RecurseParam|Where-Object{-not $_.psIsContainer} # @RecurseParam is basically -Recurse=[$True|$False]
#$Files=$Files|Out-GridView -PassThru -Title 'Select the Files to Search' # Manually choose files to search, requires powershell 3.0
Write-Host "Done"
# ---- Begin Search ----
Write-Host "Searching Files..."
$Files|
Select-String $Search @SelectParam| #The @ instead of $ lets me pass the hastable as a list of parameters. @SelectParam is either -List or -AllMatches
Tee-Object -Variable Results|
Select-Object Path
Write-Host "Search Complete"
#$Results|Group-Object path|ForEach-Object{$path=$_.name; $matches=$_.group|%{[string]::join("`t", $_.Matches)}; "$path`t$matches"} # Show results including the matches separated by tabs (useful if using regex search)
<# Other Stuff
#-- Saving and restoring results
$Results|Export-Csv "$env:appdata\SearchResults.txt" # $env:appdata can be replaced with any UNC path, this just seemed like a logical place to default to
$Results=Import-Csv "$env:appdata\SearchResults.txt"
#-- alternate search patterns
$Search="(\d[-|]{0,}){15,19}" #Rough CC Match
#>
これは、これを行うための最善の方法ではありません。
gci <the_directory_path> -filter *.csv | where { $_.OpenText().ReadToEnd().Contains("|") -eq $true }
これは私が彼らに|
文字を持っていたすべてのCSVファイルを見つける助けました。
PowerShellは、基本的にfindstr.exeの必要性を排除しています。これらの回答のどれもうまくいくはずです。
ただし、実際にfindstrを使用する必要がある場合はです。exeファイル(私の場合のように)、ここではそれのためのPowerShellラッパーです:
は出力にFINDSTRコマンドラインを-Verbose
オプションを使用します。このために良い記事でウェブサイトがあります
function Find-String
{
[CmdletBinding(DefaultParameterSetName='Path')]
param
(
[Parameter(Mandatory=$true, Position=0)]
[string]
$Pattern,
[Parameter(ParameterSetName='Path', Mandatory=$false, Position=1, ValueFromPipeline=$true)]
[string[]]
$Path,
[Parameter(ParameterSetName='LiteralPath', Mandatory=$true, ValueFromPipelineByPropertyName=$true)]
[Alias('PSPath')]
[string[]]
$LiteralPath,
[Parameter(Mandatory=$false)]
[switch]
$IgnoreCase,
[Parameter(Mandatory=$false)]
[switch]
$UseLiteral,
[Parameter(Mandatory=$false)]
[switch]
$Recurse,
[Parameter(Mandatory=$false)]
[switch]
$Force,
[Parameter(Mandatory=$false)]
[switch]
$AsCustomObject
)
begin
{
$value = $Pattern.Replace('\', '\\\\').Replace('"', '\"')
$findStrArgs = @(
'/N'
'/O'
@('/R', '/L')[[bool]$UseLiteral]
"/c:$value"
)
if ($IgnoreCase)
{
$findStrArgs += '/I'
}
function GetCmdLine([array]$argList)
{
($argList | foreach { @($_, "`"$_`"")[($_.Trim() -match '\s')] }) -join ' '
}
}
process
{
$PSBoundParameters[$PSCmdlet.ParameterSetName] | foreach {
try
{
$_ | Get-ChildItem -Recurse:$Recurse -Force:$Force -ErrorAction Stop | foreach {
try
{
$file = $_
$argList = $findStrArgs + $file.FullName
Write-Verbose "findstr.exe $(GetCmdLine $argList)"
findstr.exe $argList | foreach {
if (-not $AsCustomObject)
{
return "${file}:$_"
}
$split = $_.Split(':', 3)
[pscustomobject] @{
File = $file
Line = $split[0]
Column = $split[1]
Value = $split[2]
}
}
}
catch
{
Write-Error -ErrorRecord $_
}
}
}
catch
{
Write-Error -ErrorRecord $_
}
}
}
}
- 1. Inno Setup:Ord Functionまたはeqivalent?
- 2. バッチファイル - タスクリスト - FindStr
- 3. 1つのコマンド| findstrと文字列操作より
- 4. 変数への応答を得るFindstr
- 5. FindStrが正しく動作しない
- 6. findstr - カンマ区切りのディレクトリリストの構文
- 7. タブ文字を含むfindstrクエリ
- 8. findstrの引用符をエスケープする
- 9. バッチ・プリント - バッチ・スクリプト - forループのfindstr条件
- 10. 変数findstrの出力を取得
- 11. findstrでスペースを含むファイルを検索
- 12. findstrでパイプラインコマンドを実行する
- 13. VHDLに `using namespace std;` eqivalentをどうやって実行できませんか?
- 14. findstrで特定のサブフォルダをバッチファイルで削除する
- 15. findstr経由でテキストファイルから行を取得する方法
- 16. 捕捉区切り文字なしのfindstrコマンド(入力)
- 17. ファイルディレクトリにfindstrを使用するとエラーが発生する
- 18. バッチファイルコマンド - Findstr、分割およびファイル名変数
- 19. findstrを使用中に問題が発生しました
- 20. FINDSTRバッチコマンドはファイルを切り捨てます
- 21. findstrが "NOW"を見つけられません
- 22. Findstrは変数入力のスペースが嫌いです。
- 23. findstr ms-dosコマンドはサブディレクトリを検索しません
- 24. Findstrとワイルドカードまたは "X"より大きい時刻
- 25. cmdでfindstrの出力を着色する方法は?
- 26. バッチfindstrをif文で使用できますか
- 27. PowerShellとPowerShell ISE
- 28. エンタープライズ検索ファイル(powershell経由)はインターネットインターネットファイルを除外
- 29. 特定の単語の後の文字列をバッチファイルのfindstrを使用して置き換えます。
- 30. バッチファイル/ Powershellスクリプトの出力をExcelスプレッドシートにエクスポートする方法
:http://www.interact-sw.co.uk/iangblog/2006/06/03/pshfindstr –