J'ai besoin de remplacer certains caractères non imprimables par des espaces dans le fichier.
Plus précisément, tous les caractères de 0x00jusqu'à 0x1F, sauf 0x09(TAB), 0x0A(nouvelle ligne), 0x0D(CR)
Jusqu'à présent, j'avais juste besoin de remplacer le 0x00personnage. Étant donné que mon système d'exploitation précédent était AIX (sans commandes GNU), je ne peux pas l'utiliser sed(enfin, je le peux, mais il y avait quelques limitations). J'ai donc trouvé la prochaine commande utilisant perl, qui a fonctionné comme prévu:
perl -p -e 's/\x0/ /g' $FILE_IN > $FILE_OUT
Maintenant, je travaille sur Linux, donc je m'attendais à pouvoir utiliser la sedcommande.
Mes questions:
Cette commande est-elle appropriée pour remplacer ces caractères? J'ai essayé, et cela semble fonctionner, mais je veux m'assurer:
perl -p -e 's/[\x00-\x08\x0B\x0C\x0E-\x1F]/ /g' $FILE_IN > $FILE_OUTJe pensais
perl -pque ça marchesed. Alors, pourquoi la commande précédente fonctionne-t-elle (au moins, elle n'échoue pas) et la suivante non?sed -e 's/[\x00-\x08\x0B\x0C\x0E-\x1F]/ /g' $FILE_IN > $FILE_OUTÇa me dit:
sed: -e expression # 1, caractère 34: caractère de classement non valide
perl -pimprime le produit finalstdinaprès avoir effectué les opérations souhaitées, dans ce cas, il s'agit simplement de remplacement.sedLe regex de peut être différent deperl.