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