/ / Comando de Linux o sintaxis de Bash que calcula el siguiente carácter ASCII: linux, perl, bash, awk

Comando de Linux o sintaxis de Bash que calcula el siguiente carácter ASCII: linux, perl, bash, awk

Tengo una máquina Linux (Red Hat Linux 5.1), y necesito agregar la siguiente tarea a mi script Bash.

¿Qué comando de Linux o sintaxis de Bash calculará el siguiente carácter ASCII?

Observación - la sintaxis del comando también puede ser AWK/ Perl, pero esta sintaxis debe estar en mi script Bash.

Ejemplo:

 input                  results

a    --> the next is   b
c    --> the next is   d
A    --> the next is   B

Respuestas

4 para la respuesta № 1

Perl "s ++ operador También maneja cuerdas, hasta cierto punto:

perl -nle "print ++$_"

los -l Opción con autochomp es necesaria aquí, ya que an por ejemplo, de lo contrario volverá 1.


8 para la respuesta № 2

Usa traductor (tr)

echo "aA mM yY" | tr "a-yA-Y" "b-zB-Z"

Imprime:

bB nN zZ


3 para la respuesta № 3

Podrías usar chr() y ord() funciones para Bash (ver ¿Cómo convierto un carácter ASCII a su valor decimal (o hexadecimal) y viceversa?)

# POSIX
# chr() - converts decimal value to its ASCII character representation
# ord() - converts ASCII character to its decimal value

0 para la respuesta № 4
perl -le "print chr(ord(<>) + 1)"

Interactivo:

breqwas@buttonbox:~$ perl -le "print chr(ord(<>) + 1)"
M
N

No interactivo:

breqwas@buttonbox:~$ echo a | perl -le "print chr(ord(<>) + 1)"
b

0 para la respuesta № 5

El valor del carácter:

c="a"

Para convertir el personaje a su valor ASCII:

v=$(printf %d ""$c")

El valor que desea agregar a este valor ASCII:

add=1

Para cambiar su valor ASCII agregando $ add to it:

((v+=add))

Para convertir el resultado a char:

perl -X -e "printf("The character is %cn", $v);"

solía -X para desactivar todas las advertencias


Puede combinar todo esto en una línea y poner el resultado en el $ v vatable:

c="a"; add=1; r=$(perl -X -e "printf("%c", $(($add+$(printf %d ""$c"))));")

Puedes imprimir el resultado:

echo "$r"

Puedes hacer una función para devolver el resultado:

achar ()
{
c="$1"; add=$2
printf "$(perl -X -e "printf("%c", $(($add+$(printf %d ""$c"))));")"
}

Puedes usar la función:

x=$(achar "a" 1) // x = the character that follows a by 1

o puedes hacer un bucle:

array=( a k m o )
for l in "${array[@]}"
do
echo "$l" is followed by $(achar "$l" 1)
done