Respostas:
Classifique as linhas em ordem alfabética, se ainda não estiverem, e execute estas etapas:
(com base nesta pergunta relacionada: como faço para localizar e remover linhas duplicadas de um arquivo usando expressões regulares? )
Control+F
Alternar "Modo de substituição"
Alterne "Usar Expressão Regular" (o ícone com o .*
símbolo)
No campo de pesquisa , digite^(.*)(\n\1)+$
No campo " substituir por ", digite$1
Nesse caso, recorra a uma solução fora do VS Code (veja aqui ) ou - se o seu documento não for muito grande e você não se importe de enviar spam para o botão Substituir tudo - siga as etapas anteriores, mas nas etapas 4 e 5, insira estes:
(com base em Remover linhas duplicadas específicas sem classificação )
Cuidado: Bloqueia arquivos com muitas linhas (1000+); pode causar o travamento do VS Code; pode introduzir linhas em branco em alguns casos.
pesquisar :((^[^\S$]*?(?=\S)(?:.*)+$)[\S\s]*?)^\2$(?:\n)?
substitua por :$1
e, em seguida, clique no botão "Substituir tudo" quantas vezes houver ocorrências duplicadas .
Você saberá que é o suficiente quando a contagem de linhas parar de diminuir quando você clicar no botão. Navegue até a última linha do documento para ficar de olho nisso.
^(.*)(\n\1)+$
. Depois de remover as linhas duplicadas, desejo examinar todas as linhas com primeira coluna duplicada no csv e modificar o regex.
\r?
parte da outra resposta não é realmente necessária.
Aqui está uma extensão muito interessante: Transformer
Recursos:
Para remover linhas duplicadas:
Remove linhas duplicadas do documento
Opera na seleção ou bloco atual se nenhuma seleção
Eu não brinquei muito com ele além do comando "Unique Lines", mas parece muito bem feito (incluindo tentar um gravador de macro!).
Para adicionar à resposta de @ Marc.2377.
Se a ordem é importante e você não se importa em manter apenas a última das linhas duplicadas, simplesmente pesquise a seguinte regexp se quiser remover apenas as linhas duplicadas não vazias
^(.+\n)(?=(?:.*\n)*?\1)
Se você também deseja remover linhas vazias duplicadas, use em *
vez de+
^(.*\n)(?=(?:.*\n)*?\1)
e substitua por nada.
Isso pegará uma linha e tentará encontrar à frente mais algumas (talvez 0) linhas seguidas exatamente pela mesma linha escolhida. Isso removerá a linha tomada.
Este é apenas um regex one-shot. Não há necessidade de spam no botão de substituição.
^(.+\n)(?=(?:.*\n)*?\1)
porque sua regex removeu uma linha vazia onde não era esperado. Votado mesmo assim.
xxx(?=…)
é uma comparação antecipada. Portanto, ele garante que tudo o que segue "xxx" corresponde a "...", mas não avança a pesquisa. (?:…)
é apenas um colchete que não conta na contagem de colchetes. .*\n
é um padrão para uma linha (possivelmente vazia). *
significa que pode haver várias linhas, mesmo nenhuma. O ?
após o asterisco ( *
) significa que queremos o mínimo de linhas possível. Como \1
segue esta expressão, o efeito é que olhamos adiante para todas as linhas que não correspondem \1
até encontrarmos uma linha correspondente \1
. Espero que isso deixe isso claro.
Eu apenas tive o mesmo problema e encontrei o pacote de código do Visual Studio "Classificar linhas". Consulte o mercado de código do Visual Studio para obter detalhes (por exemplo, linhas de classificação ).
Este pacote tem a opção "Classificar linhas (únicas)", que resolveu isso para mim. Tome cuidado com quaisquer espaços em branco no início / fim das linhas. Eles influenciam se as linhas são consideradas únicas ou não.
Instale a extensão DupChecker , clique F1e digite "Verificar Duplicatas".
Ele verificará se há duplicatas e perguntará se você deseja removê-las.
Tente localizar e substituir por uma expressão regular .
Encontrar:
^(.+)((?:\r?\n.*)*)(?:\r?\n\1)$
Substituir:
$1$2
É possível introduzir alguma variação no primeiro grupo.
Na verdade, não no Visual Studio Code, mas se funcionar, funcionará.
Não é a melhor resposta, pois você especificou o código do Visual Studio, mas como eu disse: Se funcionar, funciona :)
((^[^\S\r\n]*?(?=\S)(?:.*)+$)[\S\s]*?)^\2$(?:\r?\n)?
fez meu vscode travar .... Eu fiz um Find in one file 229 linhas. :(