Vous pouvez utiliser sed :
echo hello world | sed -E "s/([^a-zA-Z]) ([^a-zA-Z])/\1\2/g"
-
([^a-zA-Z]) ([^a-zA-Z])
est une expression régulière correspondant à un espace entre deux caractères non latins ( ^
nie). Les caractères précédents et suivants sont saisis en groupes (#1 et #2)
-
\1\2
est la chaîne de remplacement (uniquement les groupes sans espace entre eux).
Sortie :
hello world
Note : pour remplacer les espaces de début et de fin, votre expression doit être :
(^|[^a-zA-Z]) ([^a-zA-Z]|$)
Edit : Une chose que je n'ai pas prise en compte est que ce type d'expression consomme les caractères avant et après les espaces. Donc dans le cas hello world
il restait encore un espace blanc. Vous devez alors utiliser un moteur regex qui prend en charge les palliatifs :
echo " hello world, !" | perl -pe "s/(?<=^|[^[:ascii:]]) | (?=[^[:ascii:]]|$)//g"
Sortie :
hello world
Afin de supprimer les espaces entre les caractères latins/kandji, j'ai divisé l'expression en deux. J'ai également remplacé la condition sur le caractère latin par ascii. Cela devrait donner des résultats plus appropriés