我想使用powershell从日志文件中选择字符串“install status”。为此,我使用了命令$ status = choicestring -path $ path -pattern“installstatus”。这个cmd给出了一个输出installstatus =成功的路径和logtime以及开头的行详细信息,我通过添加| {$ _来删除路径。在$ status.Ind模式之后的行}我想要删除行详细信息。我可以删除那些详细信息。我只想显示模式。任何帮助都将被关注。谢谢你的推荐。
这里是场景
$path="C:\Users\sumith\filename.log";
$status=select-string -path $path -pattern "Install_status"
输出
C:\Users\sumith\filename.log:79:ISS_LOG [14:45:41]: INSTALL_STATUS:SUCCESS
如果我给
$status=select-string -path $path -pattern "Install_status" | {$_.Line}
输出将是
ISS_LOG [14:45:41]: INSTALL_STATUS:SUCCESS
现在我想从输出中删除ISS_LOG [14:45:41]:
答案 0 :(得分:1)
IMO你最好使用正则表达式:
$File = ".\filename.log"
$Content = (Get-Content $File -raw)
$Pattern = [regex]'INSTALL_STATUS:\s*(\w+)'
"Using -Match operator"
if ($Content -Match $Pattern){
$Matches[0]
$Matches[1]
} Else {
"couldn#T find a match"
}
"Using [RegEx] .Matches method"
$Matches = $Pattern.Matches($Content)
$Matches.Captures[0].Value
$Matches.Captures.Groups[1].Value
您的问题和评论在文件内容方面有所不同,
冒号INSTALL_STATUS: SUCCESS
后面的空格。
示例输出:
Using -Match operator
INSTALL_STATUS: SUCCESS
SUCCESS
Using [RegEx] .Matches method
INSTALL_STATUS: SUCCESS
SUCCESS
答案 1 :(得分:0)
试试这个,
$status=select-string -path $path -pattern "Install_status" | {$_.Line}
$status.Substring(19)OR
$status=select-string -path $path -pattern "Install_status" | {$_.Line}
$status.Substring($status.IndexOf('IN'))
or
$status=select-string -path $path -pattern "Install_status" | {$_.Line}
$status.Substring($status.IndexOf(']:')+2)
Or using Regex (Credits to LotPengs)
$Content=Get-Content D:\creditdetails.txt
$Pattern = [regex]'INSTALL_STATUS:\s*(\w+)'
if( $Pattern.Matches($Content) -ne $null){
$Matches=$Pattern.Matches($Content)
$Matches.Captures[0].Value
}else{
$Matches='No Match Found'
}
假设日志结构保持不变。
答案 2 :(得分:0)
对于控制台输出(修改过的 Chetan Kulkarni 答案)
(Select-String -Path .\file.txt -Pattern 'abcde').line