web-dev-qa-db-fra.com

Remplacement du personnage de contrôle dans sed

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?

18
myahya

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.

16
myahya

Essayer:

sed 's/^A/foo/g' file

Utilisation Ctrl+V+A pour créer la séquence ^A dans la commande ci-dessus.

23
dogbane

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.

17
Martin Ellis

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
6
William Pursell

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 

0
Suman