요구사항은 다음과 같습니다.
입력 파일 input.txt:
a1
a2
a3
a4
b1
b2
a5
b3
b4
b5
필요한 출력 파일 output.txt는 다음과 같습니다.
a1
a4
b1
b2
a5
b3
b5
즉, N번째 행을 제거하는 것입니다. N이 충족하는 조건은 N번째 행의 첫 글자와 N-1번째 행과 N+1번째 행이 동일하다는 것입니다(첫 번째 행과 마지막 행은 제거되지 않음).
이 요구 사항을 충족하기 위해 vi의 대체 명령이나 셸을 사용할 수 있나요? 또한 몇 가지 팁을 드리고 싶습니다. (C++를 사용하여 구현했는데, 이제 정규식을 사용하여 구현할 수 있는지 알고 싶습니다.)
vim의 정규식
으아악세 문단으로 설명해주세요
((.).*n)
첫 번째 줄을 일치시키고, 외부 그룹은 교체 시 역참조로 사용되며, 내부 그룹은 후속 판단에 사용됩니다
((2.*n)+)
이전 줄의 첫 글자로 시작하는 다음 줄과 일치합니다(1줄 이상)
(2.*$)
첫 번째 줄의 첫 글자로 시작하는 줄과 일치합니다
마지막 15개는 위에서 일치하는 모든 줄을 첫 번째와 마지막 줄로 대체합니다. 즉, 중간 줄을 삭제합니다
참고: 초기 v는 Perl 일반 모드로 전환하는 것이므로 대괄호와 더하기 기호를 이스케이프할 필요가 없습니다
BTW 이런 종류의 텍스트 처리 작업을 완료하려면 Perl 스크립트를 사용하는 것이 가장 편리합니다. vi의 장점은 시각적 디버깅이지만 대용량 파일을 접할 때는 GG입니다.