Shell-Script

如何找到一個單詞並使用以下行將其刪除

  • February 8, 2017

我一直在使用awk腳本Expect來編輯包含開關資訊的文本文件,到目前為止,文本文件如下所示:

Device ID Local Intrfce 
 BIOTERIO Gig 1/0/6 
 N7K-LAN(JAF1651ANDL) Gig 1/0/1 134 
 LAB_PESADO Gig 1/0/11 
 Arquitectura_Salones Gig 1/0/9 129 
 CIVIL_253 Gig 1/0/4 
 Arquitectura Gig 1/0/3 
 ING_CIVIL_DIR Gig 1/0/10 
 ING_CIVIL Gig 1/0/7 
 Ingenieria_Posgrado --More-- 
 Device ID Local Intrfce 
 Gig 1/0/8 134 
 Biblio_Barragan Gig 1/0/2 
 Electronica_Edif_3 Gig 1/0/5 127 
 Barragan_3750>exit Connection closed by foreign host. 
 ]0;cesar@cesar-HP-Pavilion-15-Note 

由於腳本處理多行輸出,--More--因此在文本文件中列印了 te 標籤,並且列名Device ID Local Intrfce被列印了兩次。

我希望文件看起來像這樣:

Device ID Local Intrfce 
 BIOTERIO Gig 1/0/6 
 N7K-LAN(JAF1651ANDL) Gig 1/0/1 134 
 LAB_PESADO Gig 1/0/11 
 Arquitectura_Salones Gig 1/0/9 129 
 CIVIL_253 Gig 1/0/4 
 Arquitectura Gig 1/0/3 
 ING_CIVIL_DIR Gig 1/0/10 
 ING_CIVIL Gig 1/0/7 
 Ingenieria_Posgrado Gig 1/0/8 134 
 Biblio_Barragan Gig 1/0/2 
 Electronica_Edif_3 Gig 1/0/5 127 
 Barragan_3750>exit Connection closed by foreign host. 
 ]0;cesar@cesar-HP-Pavilion-15-Note 

我知道如何找到一個特定的單詞,但它可以在任何列中,因為這取決於終端長度。

回顧一下,我想找到–More–這個詞,然後用下面的一行刪除它。

有什麼幫助嗎?

謝謝。

更新:

這完成了工作:sed '/--More--/{N;N; s/--More--.*\n[ \t]*//}' 在期望腳本中,語法是:

send -- "sed '/--More--/{N;N; s/--More--.*\\n\[ \\t\]*//}' TablaCDP.dat > CDPyPuerto.dat \r"

sed

sed '/--More--/{s///;n;d;}'

awk等價物:

awk 'sub(/--More--/, "") {print; getline; next}; {print}'

Perl 也可以:

$ perl -pe '$_ = "" if($. > 1 and $_ =~ /Device ID Local Intrfce/); $_ =~ s/--More--//;'  input.txt   
Device ID Local Intrfce 
 BIOTERIO Gig 1/0/6 
 N7K-LAN(JAF1651ANDL) Gig 1/0/1 134 
 LAB_PESADO Gig 1/0/11 
 Arquitectura_Salones Gig 1/0/9 129 
 CIVIL_253 Gig 1/0/4 
 Arquitectura Gig 1/0/3 
 ING_CIVIL_DIR Gig 1/0/10 
 ING_CIVIL Gig 1/0/7 
 Ingenieria_Posgrado  
 Gig 1/0/8 134 
 Biblio_Barragan Gig 1/0/2 
 Electronica_Edif_3 Gig 1/0/5 127 
 Barragan_3750>exit Connection closed by foreign host. 
 ]0;cesar@cesar-HP-Pavilion-15-Note 

引用自:https://unix.stackexchange.com/questions/343485