quarta-feira, 12 de abril de 2017

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

0 comentários: