Você pode usar:
:v/module/s/\v.*(sup|gnd).*//
-
:v/pattern/cmdrunscmdnas linhas que não correspondem ao padrão -
\vativa muito mágica para que todos os caracteres(,|sejam tratados como operadores regexp sem a necessidade de prefixá-los com\.
Observe que esvazia , mas de outra forma não remove as linhas que contêm sup ou gnd . Para removê-los, como você não pode aninhar os comandos g / v , você pode usar o operador regexp de look_eg negativo do vim em um comando g :
:g/\v^(.*module)@!.*(sup|gnd)/d
-
:g/pattern/cmdrunscmdnas linhas que o do corresponde ao padrão -
(pattern)@!(com muito mágica ) combina com largura zero se o padrão não for correspondido nessa posição, então^(.*module)@!corresponde no começo de uma linha que não 't contermodule.
Há também a opção de canalizar para sed ou awk :
:%!sed -e /module/b -e /sup/d -e /gnd/d
-
/module/bramifica (e a linha é impressa) para linhas que contêmmodule. - para as linhas que não o fazem, continuamos com os próximos dois comandos que excluem a linha se ela contiver
supougnd, respectivamente.
ou:
:%!awk '/sup|gnd/ && ! /module/'
Se você quiser encontrar os arquivos que precisam dessas linhas removidas e removê-los, provavelmente vai querer ignorar vim e fazer tudo com utilitários de processamento de texto. Em um sistema GNU:
find . ! -name '*.back' -type f -size +3c -exec gawk '
/sup|gnd/ && ! /module/ {printf "%s:v/module/s/\v.*(sup|gnd).*//
", FILENAME; nextfile}' '{}' + |
xargs -r0 sed -i.back -e /module/b -e /sup/d -e /gnd/d
(aqui salvando um backup dos arquivos originais como the-file.back , altere -i.back para -i se você não precisar do backup).
-
findencontra os arquivos regulares cujo nome não termina em.backe cujo tamanho é de pelo menos 4 bytes (os menores não podem conter uma linha que contenhasupougnd(e o delimitador de linha) ) e executagawkcom os caminhos dos arquivos correspondentes como argumentos. - quando
gawkencontra uma linha em qualquer um desses arquivos correspondentes, ela imprime o caminho do arquivo (FILENAMEspecial variable) delimitado com um caractere NUL (porxargs -0) e pula para o próximo arquivo. -
xargs -r0processa quegawkproduz para executarsedcom esses caminhos de arquivo como argumentos. -
sededita o arquivo no lugar.