web-dev-qa-db-fra.com

Supprimer tous les caractères spéciaux d'une chaîne dans Bash

J'ai beaucoup de texte en minuscule, le seul problème, c'est qu'il y a beaucoup de caractères spéciaux, que je souhaite supprimer avec des chiffres également.

La commande suivante n'est pas assez forte:

tr -cd '[alpha]\n '

Dans le cas de éćščž et quelques autres, il retourne "?" Mais je veux tous les enlever. Y a-t-il un commandement plus fort?

J'utilise linux mint 4.3.8 (1) -release 

7
Marta Koprivnik

Je ne sais pas exactement d'où vient le texte dans votre question, mais disons simplement que "le texte en minuscule" se trouve dans le fichier appelé special.txt, vous pouvez faire quelque chose comme ce qui suit, mais vous concentrer davantage sur les caractères que vous souhaitez conserver : 

cat special.txt | sed 's/[^a-z  A-Z]//g'

C'est un peu comme opérer avec une hache.

Une autre solution possible dans le post Supprimer les caractères non-ascii de ...

Si ce qui précède ne résout pas votre question, veuillez essayer de fournir un peu plus de détails et je pourrais peut-être fournir une réponse plus exploitable.

3
John Mark Mitchell

Je voulais juste ajouter ma part. Le code ci-dessous fera un meilleur travail pour se débarrasser de tous les caractères comme expliqué ci-dessus et les remplacera par un espace et préservera votre caractère de nouvelle ligne en même temps.

    tr -s "[:punct:]" " "

De la saisie manuelle 

Pincez plusieurs occurrences des caractères répertoriés dans le dernier opérande (chaîne1 ou chaîne2) de l'entrée dans une seule instance du caractère. Cela se produit une fois toutes les suppressions et traductions terminées.

0