我正在執行一個命令,我得到如下輸出
Identifier: 3 SFP
Connector: 7 LC
Transceiver: 7004404000000000 4,8,16_Gbps M5 sw Short_dist
Encoding: 6 64B66B
Baud Rate: 140 (units 100 megabaud)
Length 9u: 0 (units km)
Length 9u: 0 (units 100 meters)
Length 50u (OM2): 3 (units 10 meters)
Length 50u (OM3): 10 (units 10 meters)
Length 62.5u:0 (units 10 meters)
Length Cu: 0 (units 1 meter)
Vendor OUI: 00:05:1e
Vendor PN: 57-0000088-01
Vendor Rev: A
Wavelength: 850 (units nm)
Options: 003a Loss_of_Sig,Tx_Fault,Tx_Disable
BR Max: 0
BR Min: 0
Date Code: 180316
DD Type: 0x68
Enh Options: 0xfa
Status/Ctrl: 0xb2
Pwr On Time: 3.52 years (30822 hours)
E-Wrap Control: 0
O-Wrap Control: 0
Alarm flags[0,1] = 0x5, 0x40
Warn Flags[0,1] = 0x5, 0x40
Temperature: 32 Centigrade
Current: 8.082 mAmps
Voltage: 3311.6 mVolts
RX Power: -5.5 dBm (280.4uW)
TX Power: -2.8 dBm (523.1 uW)
我只需要獲取最后兩行,即從 RX 和 TX 開始。
我試著像
#$streamOut | Select-String -Pattern "^RX" | select -ExpandProperty line
$streamOut | Select-String -Pattern "RX" | select -ExpandProperty line
這是通過代碼
$session = New-SSHSession -ComputerName $SAN_IP -Credential $cred
$Strem = New-SSHShellStream -SSHSession $Session
$streamOut=@()
$SystemView = $Strem.WriteLine("sfpshow $port_Num")
sleep -Seconds 5
$streamOut = @($Strem.read())
sleep -Seconds 5
$RXTX_Data = @($streamOut | ? { $_ -match "^RX" -or $_ -match "^TX"})
$RXTX_Data
當我在上面的代碼中使用以下解決方案時,它回傳空白。$streamOut是陣列
PS C:\Windows\system32> $streamOut.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
但它正在回傳整個輸出。
請讓我知道這一點
uj5u.com熱心網友回復:
正如您所澄清的,該$streamOut變數包含一個多行字串。
在這種情況下,您可以像這樣Select-String使用-AllMatches:
$RXTX_Data = ($streamOut | Select-String -Pattern '(?m)^(RX|TX).*$' -AllMatches).Matches.Value
$RXTX_Data # Output array of matching lines
輸出:
RX Power: -5.5 dBm (280.4uW)
TX Power: -2.8 dBm (523.1 uW)
請注意,對多行模式(?m)使用inline 修飾符很重要,它改變了錨定行首和錨定行尾的行為,而不是整個輸入字串的開始和結束。^$
一個更簡單的替代方法是先將字串拆分為行,因此您可以使用-match運算子過濾匹配的行:
$streamLines = $streamOut -split '\r?\n'
$RXTX_Data = $streamLines -match '^(RX|TX)'
這是因為當 LHS 運算元是像陣列這樣的集合時-match,其他比較運算子充當過濾器。我們不需要多行模式,因為正則運算式會單獨應用于每個陣列元素(行)。
上面兩行甚至可以濃縮成一行:
$RXTX_Data = ($streamOut -split '\r?\n') -match '^(RX|TX)'
uj5u.com熱心網友回復:
試試這個 :
$streamOut = Get-Content -Path "Your_Output_FilePath"
$streamOut | ? { $_ -match "^RX" -or $_ -match "^TX"}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/478635.html
下一篇:洗掉字串中的所有標簽標簽
