我一直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--
会打印在文本文件中,并且列名称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"
答案1
和sed
:
sed '/--More--/{s///;n;d;}'
等价awk
的:
awk 'sub(/--More--/, "") {print; getline; next}; {print}'
答案2
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