Confesso que o título do artigo não explica exatamente o que esta dica faz, mas é que achei demasiadamente complicado explicar em poucas palavras o que esta dica realmente faz; porém vou tentar dar um exemplo do problema que tive e em seguida a solução para ficar um pouco mais fácil:
De posse de um arquivo de texto com a relação de várias linhas telefônicas eu precisava editá-las para que tal arquivo fosse convertido para .csv e em seguida importado para uma tabela MySQL. Os números telefones estavam no seguinte formato:
554512345678
554523456789
554534567890
554545678901
554556789012
554567890123
554578901234
554589012345
A minha necessidade para com este arquivo era a inserção de um “;” (ponto e vírgula) exatamente na posição 8 de cada linha. Obviamente se fosse um arquivo do tamanho deste meu exemplo, a inserção manual do “;” não demandaria muito trabalho, porém o arquivo em questão possuia mais de 2000 linhas.
Se você já é leitor aqui do blog e acompanha meus artigos e dicas, deve saber que meu editor de textos preferido é o vim justamente por suas muitas funcionalidades. Então obviamente procurei uma solução dentro dele para resolver o meu problema, mas infelizmente não encontrei.
Claro que não desisti, e com um pouco mais de buscas, descobri que o comando sed fazia exatamente o que eu queria. A solução encontrada então foi esta:
sed 's/.\{8\}/&;/' arquivo.txt
Na verdade, o comando acima não insere diretamente no arquivo.txt o “;” na oitava posição de cada linha conforme eu queria, ele apenas me apresenta na tela como ficaria o resultado. Após ter certeza de que o parâmetro está correto, daí então executei o mesmo comando acrescentando apenas alguns poucos parâmetros:
sed 's/.\{8\}/&;/' arquivo.txt > arquivo.csv
Pronto, desta forma eu criei um arquivo novo com as alterações que eu desejava e mantive o original para o caso de precisar de algum backup.