Powershell - 如何从选择字符串输出中删除行详细信息

时间:2017-06-24 04:01:04

标签: powershell

我想使用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]:

3 个答案:

答案 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