2016-11-29 42 views
1

我試圖在PowerShell中過濾我的文件,因此它只包含具有值的行。有沒有辦法確定[CAR]標籤背後是否有值?或者我會不得不寫這樣的東西?在PowerShell中過濾帶.txt文件中的行

$file = Get-Content C:\file.txt 
foreach ($line in $file){ 
    if ($line.Length -gt 47){ 
     #somehow safe those lines in another file 
    } 
} 

例原始文件:這應該是在新文件中的內容的

25 13:58:09.680 (0410041011) >>> DIAG[CAR] 
25 13:58:09.788 (0410041120) <<< [NAK]#99[CAR]0998034398[CAR]0998028069[CAR] 
25 13:58:29.789 (0410061120) >>> DIAG[CAR] 
25 13:58:29.896 (0410061227) <<< [NAK]#99[CAR]0998023613[CAR] 
25 13:58:49.897 (0410081228) >>> DIAG[CAR] 
25 13:58:49.981 (0410081311) <<< [NAK]#99[CAR]0998007552[CAR]0998019114[CAR]0998007115[CAR] 
25 13:59:09.982 (0410101312) >>> DIAG[CAR] 
25 13:59:10.069 (0410101399) <<< [NAK]#99[CAR]0998024143[CAR] 
25 13:59:29.070 (0410120400) >>> DIAG[CAR] 
25 13:59:29.177 (0410120507) <<< [NAK]#99[CAR] 

例子:

25 13:58:09.788 (0410041120) <<< [NAK]#99[CAR]0998034398[CAR]0998028069[CAR] 
25 13:58:29.896 (0410061227) <<< [NAK]#99[CAR]0998023613[CAR] 
25 13:58:49.981 (0410081311) <<< [NAK]#99[CAR]0998007552[CAR]0998019114[CAR]0998007115[CAR] 
25 13:59:10.069 (0410101399) <<< [NAK]#99[CAR]0998024143[CAR] 

回答

1
$data = @(
    "25 13:58:09.680 (0410041011) >>> DIAG[CAR]", 
    "25 13:58:09.788 (0410041120) <<< [NAK]#99[CAR]0998034398[CAR]0998028069[CAR]", 
    "25 13:58:29.789 (0410061120) >>> DIAG[CAR]", 
    "25 13:58:29.896 (0410061227) <<< [NAK]#99[CAR]0998023613[CAR]", 
    "25 13:58:49.897 (0410081228) >>> DIAG[CAR]", 
    "25 13:58:49.981 (0410081311) <<< [NAK]#99[CAR]0998007552[CAR]0998019114[CAR]0998007115[CAR]", 
    "25 13:59:09.982 (0410101312) >>> DIAG[CAR]", 
    "25 13:59:10.069 (0410101399) <<< [NAK]#99[CAR]0998024143[CAR]", 
    "25 13:59:29.070 (0410120400) >>> DIAG[CAR]", 
    "25 13:59:29.177 (0410120507) <<< [NAK]#99[CAR]" 
) 

# Use lookahead for a digit 
$data -match "\[CAR\](?=\d)" 
+0

本身的lookahed據我所知沒有任何用處?您可以輕鬆地將其刪除並用'「\ [CAR \] \ d]替換它」' –

+0

您是對的。在工程上。 –