Remove todo o espaço em branco após uma palavra específica

5

Estou tentando usar expressões regulares para remover todos os espaços em branco após uma palavra específica. O editor que estou usando é o Notepad ++, mas sou capaz de usar o Unix

Neste caso, são VALORES que posso destacar executando regex \ VALUES, mas não tenho certeza de como remover espaços em branco depois disso.

    
por James Berrisford 23.01.2017 / 13:30

4 respostas

8

Usando sed :

$ sed 's/VALUES[[:blank:]]*/VALUES/g' input >output

Isso substituirá VALUES seguido por qualquer número de caracteres de espaço em branco (espaço ou tabulação) com VALUES , ou seja, removerá o espaço em branco.

Se for importante que VALUES seja correspondido como uma palavra completa, isto é, que whateverVALUES não é não correspondido, insira um padrão de limite de palavras (início de) antes de VALUES :

$ sed 's/[[:<:]]VALUES[[:blank:]]*/VALUES/g' input >output

Deixarei isso para o restante desta resposta.

Para um valor mais complicado de VALUES , pode ser conveniente não precisar digitá-lo duas vezes:

$ sed 's/\(VALUES\)[[:blank:]]*//g' input >output

Isso salva o padrão VALUES e o reutiliza na substituição.

Se o padrão VALUES estiver armazenado na variável do shell $values :

$ sed "s/\($values\)[[:blank:]]*//g" input >output

Isso é transferido mais ou menos diretamente para o editor do Vim:

:%s/\(VALUES\)[[:blank:]]*//

Como eu nunca usei o Notepad ++, só posso adivinhar como usá-lo. Deve-se aparentemente ser capaz de pressionar Ctrl + H e inserir um padrão de busca / busca e substituição.

O padrão de pesquisa pode ser (VALUES)[[:blank:]]* , enquanto o padrão de substituição pode ser $1 . Eu não tenho como testar isso, desculpe. Se [[:blank:]] não funcionar, tente com [\t ] .

    
por 23.01.2017 / 14:28
3

Você pode usar \s* (GNU) ou [[:space:]]* (portátil) para capturar guias (e todos os outros caracteres de espaçamento horizontal e vertical), além de espaços.

$ cat file
stuff and VALUES    <--tab
more VALUES   <--three spaces
VALUES      <--tab, three spaces, tab

$ sed 's/VALUES\s*/VALUES/' file
stuff and VALUES<--tab
more VALUES<--three spaces
VALUES<--tab, three spaces, tab
    
por 23.01.2017 / 14:12
2

Usando sed :

sed -e 's/VALUES \+/VALUES/'

Usando + para corresponder a todos os espaços após VALUES

    
por 23.01.2017 / 14:03
0

No Notepad ++, abra a janela de localização e substituição

Na caixa de busca, digite (VALUES)\s* (corresponde a "VALUES" seguido de qualquer quantidade de espaço em branco) Na caixa de substituição, insira (insere o primeiro grupo (entre parênteses () )

Verifique se as expressões regulares estão ativadas

Clique em substituir tudo para substituir todas as instâncias de "VALUES [some whitespace]" por "VALUES"

    
por 23.01.2017 / 15:43