Remover caracteres em uma determinada posição do texto

1. Remover caracteres em uma determinada posição do texto

DENYS KENNEDY MARTINS COSTA
amnesia

(usa Debian)

Enviado em 24/08/2015 - 11:09h

Bom dia pessoal!
Tenho alguns arquivos txt que preciso remover alguns caracteres. Por exemplo, quero remover o caractere que encontra-se na posição 85 de todas das linhas que começarem com os três caracteres R18, preciso fazer isso direto no arquivo. Alguém tem idéia de como fazer?

Se puderem ajudar, agradeço!


  


2. Re: Remover caracteres em uma determinada posição do texto

Patrick Costa da Silva
patrickpcs

(usa Nenhuma)

Enviado em 24/08/2015 - 11:15h

Estude o comando SED. Ele é perfeito para isso
Recomendo esse link para shell script
Canivete suíço de shell script.
http://aurelio.net/shell/canivete/

http://www.inf.ufrgs.br/~elgios/linux/sed-HOWTO/sed-HOWTO-5.html

O sed é poderoso, é um pouco chato no começo pois ele tem muitas possibilidades.
Procura no google, tem muito conteúdo sobre ele.

_____________________________________________________
The quiter you become, the more you are able to hear.
-----------------------------------------------------



3. Re: Remover caracteres em uma determinada posição do texto

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 24/08/2015 - 15:15h

Olá,

Poste algumas linhas de exemplo real. (dentro das tags code) para podermos ser precisos na ajuda.

De qualquer forma, segue:

sed -ri '/^R18/ s/^(.{84})(.)(.*)$/\1\3/g' arquivo.txt  



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 ---


4. Re: Remover caracteres em uma determinada posição do texto

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 25/08/2015 - 21:55h

Olá,

Deu certo?

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 ---


5. Re: Remover caracteres em uma determinada posição do texto

DENYS KENNEDY MARTINS COSTA
amnesia

(usa Debian)

Enviado em 26/08/2015 - 09:36h


Cara deu certo, perfeito, valeu mesmo!!
Só uma última coisa, se não for incomodar. Gostaria da explicação do comando o que cada parte dele faz exatamente, só para que eu possa entender e saber o que estou digitando!

Valeu mesmo! Obrigado!


6. Re: Remover caracteres em uma determinada posição do texto

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 26/08/2015 - 11:28h

amnesia escreveu:


Cara deu certo, perfeito, valeu mesmo!!
Só uma última coisa, se não for incomodar. Gostaria da explicação do comando o que cada parte dele faz exatamente, só para que eu possa entender e saber o que estou digitando!

Valeu mesmo! Obrigado!


Que bom!

Segue a explicação:

sed -ri '/^R18/ s/^(.{84})(.)(.*)$/\1\3/g' arquivo.txt  


sed -ri : A opção -r ativa o recurso de expressões regulares estendida. A opção -i diz ao sed para realizar a alteração diretamente no arquivo original.
'/^R18/ : A primeira expressão entre as barras, diz ao sed para executar o comando a seguir somente nas linhas que a contém , no caso R18. O caractere ^ indica começo de linha.

Agora vamos ao comando. A sintaxe é 's/isso/por isso/g'. Onde s significa substituir e g significa global (em todas as ocorrências).

s/: Substituir
^: Começo de linha, seguido de :
(.{84}): 84 caracteres ( o .(ponto) em expressões regulares significa qualquer caractere. As Chaves determinam as quantidades, no caso 84. Os parenteses servem para agrupar pedaços da expressão. Logo, acabamos de formar o primeiro grupo (do começo da linha até o caractere numero 84)
(.) : Aqui formamos o 2segundo grupo (um caractere após o de numero 84, que no caso é o caractere 85)
(.*)$/ : O .(ponto) já sabemos que significa qualquer caractere, o * (asterisco) é um meta-caractere ou WildCard, ele diz ao caractere a esquerda que pode ter 0 ou mais vezes, ou seja, qualquer coisa em qualquer quantidade. E o $ significa fim da linha. Então acabamos de criar o terceiro grupo. (qualquer coisa até o fim da linha, contanto que que venha depois de 84 caracteres, seguido um caractere).

Pronto, fizemos o "isso", agora vamos para o "por isso":

\1\3/g' : Os grupos que criamos podem ser representados pelo \numero (tecnicamente chamados de retrovisores). Então, a parte "por isso" do nosso comando fica assim: o primeiro grupo(\1) seguido do terceiro grupo(\3) ELIMINANDO o segundo grupo - O bendito caractere 85.
/g' : significa global (em todas as ocorrências), ou seja, todas as linhas no arquivo.

Em resumo, o comando substitui o grupo 1, 2 e 3 pelo grupo 1 e 3

Conseguiu entender?

---
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 ---






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts