wake-up-neo.net

Steuerzeichen in sed ersetzen

Ich muss alle Vorkommen des Steuerzeichens STRG + A (SOH/ASCII 1) in einer Textdatei in Linux ersetzen. Wie kann dies in SED erreicht werden?

18
myahya

Dies kann durch cat mit den -v-Optionen (äquivalent --show-nonprinting-Optionen und Weiterleiten in sed) erfolgen.

Wenn das Steuerzeichen das Startzeichen (SOH) (STRG + A/ASCII 1) ist und wir es durch eine Registerkarte ersetzen möchten, würden wir Folgendes tun:

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

cat -v würde das SOH-Zeichen durch ^ A ersetzen, das dann in sed abgeglichen und ersetzt würde.

16
myahya

Versuchen:

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

Benutzen Ctrl+V+A um die Sequenz ^A im obigen Befehl zu erstellen.

23
dogbane

Mit "ersetzen" gehe ich davon aus, dass Sie die Datei "in-place" ändern möchten.

Verwenden von 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

gibt ...

SOH

Die -i-Option funktioniert nicht unter OS X sed. Sie müssen das Problem umgehen, indem Sie sed in eine temporäre Datei leiten.

17
Martin Ellis

Womit möchten Sie sie ersetzen? Wenn es sich bei der Ersetzung um ein einzelnes Zeichen handelt, ist tr eine bessere Wahl als sed. Um mit dem Buchstaben 'a' zu ersetzen:

tr '\1' a < input-file > tmp && mv tmp input-file
6
William Pursell

Sie können den Befehl tr verwenden

tr -s '\ 001' '|' neue Datei

tr -s "Word oder Trennzeichen" möchte das neue "Word oder Trennzeichen" ersetzen 

0
Suman