Je dois remplacer toutes les occurrences du caractère de contrôle CTRL + A (SOH/ascii 1) dans un fichier texte sous Linux, comment cela peut-il être réalisé dans SED?
Cela peut être fait via cat
avec les -v
(les mêmes options --show-nonprinting
et les canaliser dans sed
).
Si le caractère de contrôle est le caractère de début d'en-tête (SOH) (CTRL + A/ASCII 1) et que nous souhaitons le remplacer par un onglet, nous procéderons comme suit:
cat -v file | sed 's/\^A/\t/g' > out
cat -v
remplacerait le caractère SOH par ^ A, qui serait alors mis en correspondance et remplacé dans sed
.
Essayer:
sed 's/^A/foo/g' file
Utilisation Ctrl+V+A pour créer la séquence ^A
dans la commande ci-dessus.
Par "remplacer", je suppose que vous voulez changer le fichier "sur place".
En utilisant GNU sed:
# Create a file with a single control character (SOH)
echo -e "\x01" > file
# Change SOH control characters to the literal string "SOH"
sed -i 's/\x01/SOH/g' file
# Check result
cat file
donne ...
SOH
L'option -i
ne fonctionne pas sous OS X sed, vous devez donc contourner le problème en lançant un fichier sed dans un fichier temporaire.
Avec quoi voulez-vous les remplacer? Si le remplacement est un caractère unique, tr
est un meilleur choix que sed
. Pour remplacer par la lettre 'a':
tr '\1' a < input-file > tmp && mv tmp input-file
Vous pouvez utiliser la commande tr
tr -s '\ 001' '|' nouveau fichier
tr -s "Word ou délimiteur" veut remplacer par "Word ou délimiteur" newfile