Bem-vindo: Dom, 16 de Junho 2019, 15:44 Pesquisa avançada

Como substituir palavras num conjunto de ficheiros de texto

Escreveu alguma aplicação ou script que quer partilhar? Ou conhece algo que quer partilhar? Sabe alguma linguagem de programação e quer partilhar esse conhecimento com um tutorial? Tem alguma dúvida em alguma linguagem? Então este é o sítio certo.

Como substituir palavras num conjunto de ficheiros de texto

Mensagempor Claudio Novais » Qua, 20 de Fevereiro 2013, 20:02

Aqui vou explicar como substituir palavras ou expressões num conjunto de ficheiros, tudo ao mesmo tempo. A execução é extremamente rápida e útil para quem precisa de alterar a mesma palavra ou expressão em muitos ficheiros.

Hoje, enquanto redigia um texto em Latex, estava a usar uma variavel com letras minúsculas que eu não estava a gostar de a usar. Comecei a fazer o documento com essa variável (através do \newcommand do Latex) e não me importei de como ela estava definida.

Com o passar do tempo, e agora com muitos ficheiros de texto, deparo-me com essa variável que por vezes confunde-me. Ora, decidi então substituir todas as ocorrências dessa variável por algo mais sugestivo. Como o fiz? Utilizei o terminal! ;)

Basicamente, recorrendo a este comando conhecido, consegui alterar todas as ocorrências nos vários ficheiros em apenas milésimos de segundo. Foi simplesmente carregar no enter e mandar o latex compilar a ver se estava tudo funcional. E estava claro.

Comando que faz as substituições



O comando que usei foi o seguinte e substitui todas as ocorrências de "isto" em "aquilo" em todos os ficheiros com a extensão ".tex":
find . -name "*.tex" -print | xargs sed -i 's/isto/aquilo/g'


Explicação do comando



Este comando é constituído por dois comandos distintos.

O primeiro comando (find) procura todos os ficheiros que acabem com a extensão ".tex" na pasta atual que você se encontra no terminal. A localização da procura é definida pelo ponto, que significa localização atual. Já a extensão é definida através do asterisco que indica que é qualquer coisa e depois terminada em .tex.

Relativamente ao segundo comando, ele recebe os vários ficheiros do primeiro comando e por cada ficheiro vai fazer uma substituição direta em tudo o que encontrar entre as duas primeiras barras por o que encontrar entre as duas últimas barras. Ou seja, neste caso em concreto vai substituir todas as ocorrências de "isto" por "aquilo".

Dentro destas barras pode-se incluir expressões regulares mais complexas conforme as necessidades de cada um.

Exemplos mais complexos



Neste caso, quis substituir todas as ocorrências da palavra "\section" que ocorre muitas vezes em latex. Repare-se que tem uma barra. É preciso fazer o escape em certos símbolos, nomeadamente em barras. E portanto se se eu quiser subsituir essa palavra por "\subsection", faço o seguinte:
find . -name "*.tex" -print | xargs sed -i 's/\\section/\\subsection/g'


Por outro lado, quando estou a redigir em latex costumo usar uma biblioteca que permite escrever anotações. Essas anotações normalmente são do tipo "\todo{notas sobre alguma coisa}" ou até "\todo[inline]{notas que ocupam a largura do texto}". Ora como no final da redação dos textos, convém apagar essas notas. A biblioteca permite escondê-las. Mas se eu quiser apagar apenas faço o seguinte:
find . -name "*.tex" -print | xargs sed -i 's/\\todo.*\}//g'


Podia mostrar muitos outros exemplos mas nunca iriam satisfazer as necessidades de cada um. Por isso, quem precisar de fazer algo assim mais complexo, basta ler um pouco de expressões regulares:
Avatar do usuário
Claudio Novais
Editor do Ubuntued
 
Mensagens: 16869
Registrado em: 25 Maio, 2011

Re: Como substituir palavras num conjunto de ficheiros de te

Mensagempor Rafael Schonberg » Seg, 4 de Março 2013, 6:27

Interessante. Mas era preciso uma interface adequada.

O terminal afasta as pessoas.
O homem não consegue descobrir novos oceanos se não tiver a coragem de perder de vista a costa. — André Gide
Avatar do usuário
Rafael Schonberg
 
Mensagens: 901
Registrado em: 19 Novembro, 2012


Voltar para Scripts, programação e aplicações em desenvolvimento

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante