2017-07-24 111 views
-1

下面是我想在我的shell命令中用作輸入的網絡日誌。我需要一個shell命令,它應該刪除除了最後的數據列之外的所有數據。我的輸入和輸出已在下面提供。請幫忙。用於刪除文本的Shell命令

輸入:

SHRNCE4> pmxznh . pmNoTimesIfhoCellFailAddToActSet -m 1 -r 
.... 

Report from 2017-07-24 13:30 UTC to 2017-07-24 14:29 UTC (4 ropfiles) 
Node SW: CXP9021776/6_R2XA08 

Date: 2017-07-24 
Time Object   pmNoTimesIfhoCellFailAddToActSet 
18:00 ManagedElement=1        191 
18:15 ManagedElement=1        205 
18:30 ManagedElement=1        178 
18:45 ManagedElement=1        215 


SHRNCE4> 

OUTPUT:

Time Object   pmNoTimesIfhoCellFailAddToActSet 
18:00 ManagedElement=1        191 
18:15 ManagedElement=1        205 
18:30 ManagedElement=1        178 
18:45 ManagedElement=1        215 

回答

0

使用awk

awk '/Time/{f=1}f && !NF{exit}f' 

你的命令變爲:

pmxznh . pmNoTimesIfhoCellFailAddToActSet -m 1 -r | awk '/Time/{f=1}f && !NF{exit}f' 

測試結果:

輸入:

[email protected]:/tmp$ cat testfile 
.... 

Report from 2017-07-24 13:30 UTC to 2017-07-24 14:29 UTC (4 ropfiles) 
Node SW: CXP9021776/6_R2XA08 

Date: 2017-07-24 
Time Object   pmNoTimesIfhoCellFailAddToActSet 
18:00 ManagedElement=1        191 
18:15 ManagedElement=1        205 
18:30 ManagedElement=1        178 
18:45 ManagedElement=1        215 

輸出:

[email protected]:/tmp$ awk '/Time/{f=1}f && !NF{exit}f' testfile 
Time Object   pmNoTimesIfhoCellFailAddToActSet 
18:00 ManagedElement=1        191 
18:15 ManagedElement=1        205 
18:30 ManagedElement=1        178 
18:45 ManagedElement=1        215 
0

sed可用於打印所有的行的從匹配於輸入的端部的圖案的線:

pmxznh . pmNoTimesIfhoCellFailAddToActSet -m 1 -r | sed -n '/^Time/,$p' 

如果空行需要被刪除在結束時,輸出可被管道輸送到sed '/^$/d'刪除它們:

pmxznh . pmNoTimesIfhoCellFailAddToActSet -m 1 -r | sed -n '/^Time/,$p' | sed '/^$/d' 

DETAIL

要打印的第一行要匹配的模式(正則表達式)爲^Time/^Time/,$描述了要打印的行的範圍; $的意思是「到最後一行」。最後的p是適用於這些行的命令,它代表「打印」。換句話說,從字符串「Time」開始的第一行打印輸入結束。

-n選項用於禁用sed的默認行爲,即將每行輸入都回顯到標準輸出。

如果在輸入中有其他以「Time」開頭的行,則可能需要修改要打印的第一行的正則表達式。

0

如果您的輸出與示例中的輸出相同,則以下內容可能會對您有所幫助。

Your_command | awk '/^Time/{val=1} val'