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 0x00
jusqu'à 0x1F
, sauf 0x09
(TAB), 0x0A
(nouvelle ligne), 0x0D
(CR)
Jusqu'à présent, j'avais juste besoin de remplacer le 0x00
personnage. É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 sed
commande.
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_OUT
Je pensais
perl -p
que ç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 -p
imprime le produit finalstdin
après avoir effectué les opérations souhaitées, dans ce cas, il s'agit simplement de remplacement.sed
Le regex de peut être différent deperl
.