Uma versão awk
mais curta:
$ awk 'gsub(/([^ ]+)/,"=&",$0)' file
=A =B =C =D =E
=P =Q =R =S =T =U
=L =M =N =O
Explicação
Fazemos uma substituição global para cada linha de entrada:
-
/([^ ]+)/
: corresponde a cada campo porque os campos são separados por espaços, portanto, essa regex corresponde a todas as outras, exceto espaços.
-
"=&"
: com cada campo, adicione =
antes.
&
meaning é substituído pelo caractere que foi correspondido. De man awk
:
gsub(r, s [, t]) For each substring matching the regular expres‐
sion r in the string t, substitute the string
s, and return the number of substitutions. If
t is not supplied, use $0. An & in the
replacement text is replaced with the text that
was actually matched. Use \& to get a literal
&. (This must be typed as "\&"; see GAWK:
Effective AWK Programming for a fuller discus‐
sion of the rules for &'s and backslashes in
the replacement text of sub(), gsub(), and gen‐
sub().)
Atualizar
Para a resposta e comentário de @glenn jackman, adiciono uma versão equivalente em perl
:
$ perl -pe 's/\b(?=\w)/=$&/g' file
=A =B =C =D =E
=P =Q =R =S =T =U
=L =M =N =O