Substituir texto dentro de aspas no vim

4

Eu tenho um arquivo sql grande e gostaria de renomear o nome da tabela de 'feedback' para 'comments', mas não quero substituir a palavra feedback no caso de qualquer linha ter esse texto, então eu estava tentando selecionar com as aspas, mas o vim não consegue encontrá-lo. Estou usando

:s/'feedback'/'comments'/

Alguma ideia de como fazer isso? talvez o vim não seja a melhor opção para isso?

    
por SERPRO 07.11.2014 / 11:33

3 respostas

6

Embora vim certamente seja capaz de fazer isso, meu primeiro pensamento seria usar sed ou perl . Usando sed :

sed -i.bak 's/'feedback'/'comments'/g' path/to/file

O -i sinalizador faz sed executar operações nos arquivos especificados em vez de gravar em stdout ( -isuffix faz uma cópia de backup path/to/filesuffix ).

    
por muru 07.11.2014 / 12:00
5

Experimente no vim:

:%s/'feedback'/'comments'/gc

isso deve funcionar como você esperava

    
por Ramya A 07.11.2014 / 11:47
2

Aqui está um one-liner do vi / vim (usando ex -s para evitar a abertura do editor de tela cheia resultando em um flash curto):

ex -s -c 'w %~ | %s/'feedback'/'comments'/g' -c 'x' <file>

Explicação:

  • w %~ salva uma cópia do arquivo com o sufixo ~ . Isso é útil como um backup no caso de você estragar alguma coisa.
  • | é o separador de comandos.
  • % significa "faça esta ação em todas as linhas".
  • s/'feedback'/'comments' , como você provavelmente já sabe, significa "texto substituto correspondente à regex 'feedback' com 'comments' na linha atual".
  • g significa "global", ou seja, não pare após a primeira substituição na linha.
  • x é uma forma abreviada de wq , ou seja, escreve o arquivo e sai. Ele precisa ser separado, porque senão ele irá ficar pendurado se não houver correspondência.
por nyuszika7h 07.11.2014 / 17:41

Tags