Experimente este em pura bash
#!/bin/bash
while IFS= read -N1 char; do
if [[ "$char" =~ [[:alnum:]] ]]; then
word="$char$word"
else
echo -n "$word$char"
word=""
fi
done <input.file >output.file
Saída:
ABCD. EFGH.IG
KLM,NOP.QR
STU. VWXYZ. 123
Essa lógica de código é bem simples. Nós lemos o caractere de arquivo por caractere (graças ao -N1
flag. O IFS=
é necessário para poder ler as novas linhas também), então adicionamos cada caractere válido que encontramos no início da variável $word
( invertendo assim a palavra). Quando encontramos um caractere não alfanumérico, fazemos eco do valor de $word
e redefinimos o valor para vazio. Repetimos esses passos até o final do arquivo