Esta versão perl
também pode lidar com comprimentos de campo arbitrários, não apenas aqueles de um único caractere:
$ perl -lpae 'for $i (@F){s/($i\s*){2,}/$i+ /g}' file
x y+ z x
x+ y z+ y
x+ z y
y z+ y x+
x+
Em um arquivo mais complexo:
$ cat file
foo foo foo bar foo
bar foo bar bar foo
foo foo x x x bar
$ perl -lpae 'for $i (@F){s/($i\s*){2,}/$i+ /g}' file
foo+ bar foo
bar foo bar+ foo
foo+ x+ bar
Explicação
O -l
apara novas linhas de cada linha de entrada, os campos -a
divide os espaços no espaço em branco na matriz @F
e -p
imprime cada linha de entrada depois de aplicar o script fornecido por -e
.
O próprio script itera sobre cada campo de entrada (a matriz @F
), salvando cada um como $i
. A substituição procura por 2 ou mais $i
consecutivos seguidos por 0 ou mais espaços e os substitui por $i+
.