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?
5 réponses
Essaie:
sed 's/^A/foo/g' file
Utiliser Ctrl+ V+ pour créer ^A
séquence dans la commande ci-dessus.
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.
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
.
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
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