10 votes

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

vim pic Comment supprimer les caractères spéciaux qui apparaissent en bleu dans l'image ? 1 comme : ^M, ^A, ^@, ^[. D'après ce que j'ai compris, ^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 ?

13voto

heemayl Points 8100

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

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

[:print:] comprend :

  • [:alnum:] (alpha-numérique)
  • [:punct:] (ponctuations)
  • espace

La notation ANSI C ( $'' ) est utilisé pour interpréter \t comme onglet littéral dans $'' (en bash et autres).

4voto

NeronLeVelu Points 2021

Pour s'assurer que la commande fonctionne avec un champ d'application limité à Sed, il faut forcer l'utilisation de l'option Classifications des caractères "C" (POSIX) pour éviter un comportement imprévisible avec les caractères non ASCII :

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

2voto

Amit Kaneria Points 1935

Essayez d'exécuter la commande suivante à l'invite de 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

-1voto

Victor Points 16

Essayez ceci dans vi ou vim :

[en mode ESC] tapez : :%s/^M//g

ou :

sed -e "s/^M//" filename > newfilename

Important : Pour entrer ^M, tapez CTRL-V, puis CTRL-M

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X