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.
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 ised
niczego nie zastąpił. Skończyło się na tym, że nie robiłem tego,sed
ale w Pythonie:Oto jednorurowa rura z rurami :
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.źródło
Perl jest dość łatwy do wykonania wyrażenia regularnego. Wystarczy wymienić
sed
zperl -np -e
: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 .Możesz sprawdzić opcje wiersza polecenia Perla, uruchamiając
perldoc perlrun
.źródło
Aby dopasować bajt zerowy, używam tego wyrażenia regularnego z SED Cygwina:
źródło