Remplacement du caractère de contrôle dans le 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
demandé sur John Kugelman 2012-11-01 19:14:25

5 réponses

Essaie:

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

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

23
répondu dogbane 2012-11-01 15:32:32

par "remplacer", je suppose que vous voulez changer le fichier "en place".

utilisation de 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

-i l'option ne fonctionne pas sur OS X sed, donc vous devez contourner cela en raccordant sed à un fichier temporaire.

17
répondu Martin Ellis 2012-11-01 15:31:21

Cela peut être fait par cat-v (équivalent --show-nonprinting options de tuyauterie et ce dans sed).

si le caractère de contrôle est le caractère de début de titre (SOH) (CTRL+A / ASCII 1), et que nous voulons le remplacer par un onglet, nous ferons ce qui suit:

cat -v file | sed 's/\^A/\t/g' > out

cat -v remplacerait le caractère SOH par ^A, qui serait alors assorti et remplacé dans sed.

15
répondu myahya 2012-11-09 14:53:05

avec quoi voulez-vous les remplacer? Si le remplacement est un caractère unique, tr est un meilleur choix que sed. À remplacer par la lettre "a":

tr '' a < input-file > tmp && mv tmp input-file
6
répondu William Pursell 2012-11-01 16:59:41

vous pouvez utiliser la commande tr

tr-s '\001' | ' newfile

tr -s", mot ou un délimiteur" voulez-vous remplacer par "mot ou un délimiteur" newfile

0
répondu Suman 2016-05-03 18:59:47