Postagem em destaque

Revertendo a ordem de uma sequência de caracteres


Vou apresentar alguns exemplos para reverter a ordem dos caracteres em uma determinada expressão. Para demonstração vou utilizar o arquivo /etc/hosts no qual fica armazenado os apontamentos de hosts do sistema operacional.

shaman@doom:~$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 doom guake.local.net

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Exemplos:

1. Utilizando o comando rev da biblioteca coreutils.

$ rev /etc/hosts

2. Criando um loop para ler os caracteres de cada linha.

#!/bin/bash

while read line; do
    # Lê a partir do último caractere.
    for ((i=${#line}; i >= 0; i--)); do
        # Imprime o caractere.
        echo -n "${line:$i:1}"
    done
    echo
done < /etc/hosts # <- arquivo
Utiliza-se o recurso de expansão de variáveis para imprimir somente o caractere da posição armazenada na variável `i`.

3. Utilizando a função string.reverse na biblioteca string.sh.

#!/bin/bash

# Importa a biblioteca
source string.sh

# Função
string.reverse "$(< /etc/hosts)"

4. O último e não muito elegante é a implementação com o comando sed.

$ sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//' /etc/hosts
Neste exemplo utiliza-se grupos de captura para deslocar o primeiro caractere da expressão para o final enquanto a expressão restante contida do grupo 2 é repetida e inicia-se um novo ciclo de deslocamento até que não haja mais caracteres.

Todos os exemplos acima produzem o mesmo efeito e retornam a seguinte saída:

tsohlacol 1.0.0.721
ten.lacol.ekaug mood 1.1.0.721

stsoh elbapac 6vPI rof elbarised era senil gniwollof ehT #
kcabpool-6pi tsohlacol-6pi     1::
tenlacol-6pi 0::00ef
xiferptsacm-6pi 0::00ff
sedonlla-6pi 1::20ff
sretuorlla-6pi 2::20ff
Note que o texto é listado, porém os caracteres são lidos de trás para frente.

Curso Online - Administração de Sistemas Debian: 20 HORAS

Comentários

Contato

Nome

E-mail *

Mensagem *