Jaka jest sed
inkantacja do usunięcia pustych bajtów z pliku? Próbuję:
s/\000//g
ale to jest usuwanie ciągów zer.
s/\x00//g
wydaje się nie mieć wpływu. Próbuję to zrobić w sed
skrypcie, więc nie jestem pewien, czy echo
sztuczka zadziała.
Jaka jest sed
inkantacja do usunięcia pustych bajtów z pliku? Próbuję:
s/\000//g
ale to jest usuwanie ciągów zer.
s/\x00//g
wydaje się nie mieć wpływu. Próbuję to zrobić w sed
skrypcie, więc nie jestem pewien, czy echo
sztuczka zadziała.
Odpowiedzi:
Nie wiem, jak dokładnie to osiągnąć sed
, ale jest to rozwiązanie, które działa z tr
:
tr < file-with-nulls -d '\000' > file-without-nulls
Jest to rozwiązanie, sed
które działa w niektórych przypadkach, ale nie we wszystkich:
sed 's/\x0//g' file1 > file2
Jest to rozwiązanie polegające na zamianie na znaki spacji, które powinny działać we wszystkich przypadkach:
sed 's/\x0/ /g' file1 > file2
-i
parametr do konwersji pliku na miejscu.
tr
potknął się o kilka innych bajtów w moim pliku i sed
niczego nie zastąpił. Skończyło się na tym, że nie robiłem tego, sed
ale w Pythonie:
f = open('file-with-0bytes.dump')
for l in f.readlines():
print l.replace("\0", '')
Oto jednorurowa rura z rurami :
python -c 'import sys; sys.stdout.write(sys.stdin.read().replace("\0", ""))'
Zauważyłem również, że niektóre polecenia faktycznie pozostawiają tam bajty zerowe, ale nie są już widoczne, przynajmniej nie w terminalu OSX. Użyłem hexdump
do debugowania to.
Perl jest dość łatwy do wykonania wyrażenia regularnego. Wystarczy wymienić sed
z perl -np -e
:
$ printf 'one\0two\0' | perl -np -e 's/\0/\n/g'
one
two
Dzięki tej -n
opcji wyrażenia regularne są uruchamiane wiersz po wierszu, podobnie jak sed.
Jeśli chcesz używać zerowych bajtów jako separatorów rekordów, użyj -0
opcji Perla .
$ printf 'one\0two\0' | perl -np0 -e 's/^/prefix /; s/\0/\n/g'
prefix one
prefix two
$ printf 'one\0two\0' | perl -np -e 's/^/prefix /; s/\0/\n/g'
prefix one
two
Możesz sprawdzić opcje wiersza polecenia Perla, uruchamiając perldoc perlrun
.
Aby dopasować bajt zerowy, używam tego wyrażenia regularnego z SED Cygwina:
[^ \ x01- \ x7F]