Autor: tonyhts
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
Comentários