
tonyhts
(usa Arch Linux)
Enviado em 28/10/2015 - 15:56h
Olá,
Deixa eu ver se entendi direito: Vc tem um arquivo que contém varias linhas. Cada linha possui mais de 150 caracteres, que :
Do caractere 1 ao 100: são dados que deseja manter ( que também possuem espaços)
Do caractere 100 ao 150: são espaços em branco que deseja trocar todos por apenas um " ; ".
Do caractere 150 até o fim da linha : são dados que vc deseja manter (que também possuem espaços)
É isso?, se sim, acredito que o comando abaixo resolve:
sed -r 's/(.{100})(.{50})(.*$)/\1;\3/g' arquivo.txt
Explicando o comando:
A sintaxe utilizada foi :
's/isso/por isso/g'
sed -r : A opção -r do sed, ativa o recurso de expressões regulares extendidas)
s/ : Substituir
(^.{100})(.{50})(.*$) : Essa é parte da sintaxe
" isso " - Não entrarei em detalhes sobre expressões regulares, mas o
^ indica o começo da linha, o
$ indica o fim da linha, o
. (ponto) significa qualquer caractere, os parenteses
() servem para agrupar expressoẽs e as chaves
{} servem para quantificar, neste caso, a tradução seria assim:
1° GRUPO: São os 100 primeiros caracteres
2° GRUPO: São os caracteres de 101 á 150
3° GRUPO: São os caracteres de 151 até o fim da linha
\1;\3/g : Essa é parte da sintaxe
" por isso " - Os grupos criados da primeira parte podem ser acessados usando
\número (barra invertida e o numero do grupo), no caso a tradução ficou assim : Grupo 1 seguido de um ; (ponto e virgula), seguido do grupo 3.
Bom, acho que é isso. Se tiver dúvidas dá um toks.
abs
abs
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.
--- Mestre dos Mestres - Alan Turing ---