Zastąpienie znaku sterującego w sedzie


Muszę zamienić wszystkie wystąpienia znaku sterującego CTRL + A (SOH/ascii 1) w pliku tekstowym w systemie Linux, jak można to osiągnąć w SED?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Próbować:
sed 's/^A/foo/g' file

Za pomocą
<kbd>
Ctrl
</kbd>
+
<kbd>
V
</kbd>
+
<kbd>
A
</kbd>
aby utworzyć sekwencję
^ A
w powyższym poleceniu.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Można to zrobić za pomocą
cat
z
-v
(odpowiednik
--show-nonprinting
) i przesłać go do
sed
).
Jeśli znak sterujący jest początkiem nagłówka (SOH) znaku (CTRL + A/ASCII 1) i chcemy go zastąpić tabulatorem, to wykonujemy następujące czynności:
cat -v file | sed 's/\^A/\t/g' > out

cat -v
zamieni znak SOH na ^ A, który zostanie następnie dopasowany i zastąpiony w
sed
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zakładam, że przez „zamianę” chcesz zmienić plik „w miejscu”.
Korzystanie z 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

daje ...
SOH

Opcja
-i
nie działa na sedzie OS X, więc będziesz musiał obejść to, przekazując seda do pliku tymczasowego.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Czym chcesz je zastąpić? Jeśli zamiennikiem jest pojedynczy znak,
tr
jest lepszym wyborem niż
sed
. Zastąp literą „a”:
tr '\1' a < input-file > tmp && mv tmp input-file
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz użyć polecenia tr
tr-s '\001' '/' newfile
tr-s „słowo lub separator” chcesz zastąpić nowym plikiem „słowo lub separator”

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się