특정 단어가 포함된 줄을 삭제하는 방법. 단, 다른 단어가 발견되면 해당 줄을 삭제하지 마세요. 예를 들어, sup
또는 이 있는 행을 삭제 gnd
하지만 루프 라인을 끊는 일부 행도 삭제합니다 :%s/.*sup.*//g
.:%s/.*gnd.*//g
module
or와 같은 행에 있는 행을 삭제하고 싶지 않습니다 . 이 라인을 정복하는 방법을 알고 계십니까?gnd
sup
답변1
당신이 사용할 수있는:
:v/module/s/\v.*(sup|gnd).*//
:v/pattern/cmd
cmd
실행 라인에서 실행아니요패턴 일치\v
열려 있는환상적이다이런 방식으로 모든 문자(
는|
접두사 없이 정규식 연산자로 처리됩니다\
.
참고하시기 바랍니다비어 있는하지만 그 외에는 안돼제거하다sup
또는 을 포함하는 라인 gnd
. 이를 제거하려면 g
/ 명령을 중첩할 수 없으므로 하나의 명령에 부정 예측 정규식 연산자를 사용할 v
수 있습니다 .vim
g
:g/\v^(.*module)@!.*(sup|gnd)/d
:g/pattern/cmd
cmd
줄을 달리고 있다하다패턴 일치(pattern)@!
(그리고환상적이다)는 다음과 같은 경우 너비가 0과 일치합니다.무늬해당 위치에는 일치 항목이 없으므로^(.*module)@!
포함되지 않은 줄 시작 부분에 일치 항목이 있습니다module
.
sed
또는 로 파이프하는 옵션도 있습니다 awk
.
:%!sed -e /module/b -e /sup/d -e /gnd/d
/module/b
.module
- 포함하지 않은 행의 경우 다음 두 명령을 계속 실행하여
sup
또는 각각 포함된 행을 삭제합니다gnd
.
또는:
:%!awk '/sup|gnd/ && ! /module/'
네가 원한다면찾다이 줄을 제거하고 삭제해야 하는 파일의 경우 건너뛰고 vim
텍스트 처리 유틸리티를 사용하여 전체 작업을 완료할 수 있습니다. GNU 시스템에서:
find . ! -name '*.back' -type f -size +3c -exec gawk '
/sup|gnd/ && ! /module/ {printf "%s\0", FILENAME; nextfile}' '{}' + |
xargs -r0 sed -i.back -e /module/b -e /sup/d -e /gnd/d
(여기서 원본 파일의 백업은 로 저장되며 the-file.back
, 백업이 필요하지 않은 경우 로 변경하십시오.) -i.back
.-i
find
.back
이름이 로 끝나지 않고 크기가 최소 4바이트인 일반 파일을 찾고 (작은 파일에는sup
또는gnd
(및 줄 구분 기호)을 포함하는 줄이 포함될 가능성이 낮음)gawk
해당 파일의 경로를 인수로 사용하여 실행합니다.gawk
어떤 파일에서든 일치하는 줄이 발견 되면FILENAME
NUL 문자(의 경우xargs -0
)로 구분된 파일 경로(특수 변수)를 인쇄하고 다음 파일로 이동합니다.xargs -r0
gawk
출력 프로세스는 이러한 파일 경로를 인수로 사용하여 실행됩니다.sed
sed
파일을 제자리에서 편집하세요.
답변2
v/(module\|input\|output)/s/\v인 것으로 확인되었습니다../