web-dev-qa-db-fra.com

Comment supprimer tous les caractères spéciaux dans le texte Linux

vim pic Comment supprimer les caractères spéciaux affichés en bleu dans l’image 1 comme: ^ M, ^ A, ^ @, ^ [. Selon ma compréhension, ^ M est un caractère de nouvelle ligne de Windows, je peux utiliser sed -i '/^M//g' pour le supprimer, mais cela ne fonctionne pas pour supprimer les autres. La commande dos2unix ne fonctionne pas non plus. Existe-t-il des moyens que je peux utiliser pour les supprimer tous les deux?

11
vinllen

Supprimer tout sauf les caractères imprimables (classe de caractères [:print:]), avec sed:

sed $'s/[^[:print:]\t]//g' file.txt

[:print:] comprend:

  • [:alnum:] (alphanumériques)
  • [:punct:] (ponctuations)
  • space

La citation ANSI C ($'') est utilisé pour interpréter \t comme onglet littéral à l'intérieur de $'' (dans bash et similaires).

15
heemayl

Pour vous assurer que la commande fonctionne avec une portée limitée dans Sed, forcez l'utilisation de classifications de caractères "C" (POSIX) pour éviter tout comportement imprévisible avec des caractères non-ASCII:

LC_ALL=C sed 's/[^[:blank:][:print:]]//g' file.txt
7
NeronLeVelu

Essayez d’exécuter la commande ci-dessous sur la commande linux

Option - 1: (Si la commande dos2unix est installée sur une machine Linux)

dos2unix sample_file.txt

Option - 2:

cat sample_file.txt | tr -d '\015' > new_sample_file.txt
2
Anamika