정수(줄 번호)와 텍스트가 포함된 파일이 있습니다. PDF 파일을 추출하면 해당 줄 번호가 텍스트와 별도의 줄에 입력되며 해당 줄 번호를 모두 삭제하고 싶습니다. 나는 정규식에 능숙하지 않지만 그것이 매우 어렵지는 않을 것이라고 100% 확신합니다. 나는 vim/nvim을 사용하지만 awk/sed를 사용해야 한다면 나에게도 도움이 될 것입니다.
파일은 다음과 같습니다.
123
124
125
Text was found in
those three lines
should stay
따라서 이상적으로는 양의 정수(1,2,3...123456)로 시작하고 해당 정수만 포함하는 모든 행을 검색하고 싶습니다. 삭제해야 합니다.
어떤 도움이라도 대단히 감사하겠습니다.
보너스 챌린지: 어떤 이유에서인지 일부 줄은 로 시작 ^L1234
하므로 특수 문자가 추가됩니다. 언젠가는 이것들도 삭제하고 싶습니다. 그러나 별도의 단계일 수 있습니다.
답변1
[0-9]
간단하다수집거의 모든 곳에서 작동하는 숫자입니다. Vim에서는\d
(십진수)도 사용할 수 있습니다 .- 하나 이상의 인스턴스가 필요하면
\+
승수를 추가하세요. - 이것이 줄의 유일한 항목이어야 하므로 정규식은 다음과 같아야 합니다.고정된시작과 끝으로( 각각
^
및 를 통해$
) - 모든 라인에서 일치를 시도하려고 합니다. Vim에서는
:global/{pattern}/
. - 일치하는 라인은 d이어야 합니다
:delete
.
종합해보면:
:global/^[0-9]\+$/delete
다음을 사용할 수도 있습니다 sed
. 더 빠르고 비대화식으로 작동합니다. 이는 모든 입력 줄에 규칙을 자동으로 적용하므로 가 필요하지 않으며 :global
는 :delete
그냥 d
거기에 있습니다. 를 사용하면 -i
교체가 제자리에서 완료됩니다(따라서 올바르게 설정하고 원본 파일의 백업 복사본을 가지고 있는지 확인하세요!)
sed -i -e '/^[0-9]\+$/d' file
선택적 접두사의 경우 해당 승수는 입니다 \?
. 단일 문자 인 경우 ^L
Vim에 <C-V><C-L>
.
답변2
Vim에서 정수만 포함하고 시작하는 줄을 제거하세요.
:%s/^[0-9]\+\n//gc
설명
:%s//
- 전역 검색 및 바꾸기^
- 줄의 시작 부분에서 시작[0-9]
- 숫자 일치\+
- 탐욕스러운 일치 하나 이상\n
개행 일치(참고: 줄 끝을 확인하세요. 시스템마다 다르며 대신 그럴 수도 있습니다\r\n
)gc
- 전역 일치 + 확인(c
많거나 확실한 경우 제거)
산출
123
124
125
Text was found in
those three lines
should stay
:%s/^[0-9]*\n//g
Text was found in
those three lines
should stay
보너스
당U&L에 대한 terdon의 답변, 은 ^L
다음을 form feed character
사용하여 제거할 수 있습니다 sed
.
sed 's/\o14//g' file
다른 방법을 보려면 해당 답변을 읽어 볼 가치가 있습니다.