Что такое sedзаклинание удалить нулевые байты из файла? Я пытаюсь:
s/\000//g
но это убирает нули.
s/\x00//g
кажется, не имеет никакого эффекта. Я пытаюсь сделать это в sedсценарии, поэтому я не уверен, что echoтрюк сработает.
Что такое sedзаклинание удалить нулевые байты из файла? Я пытаюсь:
s/\000//g
но это убирает нули.
s/\x00//g
кажется, не имеет никакого эффекта. Я пытаюсь сделать это в sedсценарии, поэтому я не уверен, что echoтрюк сработает.
Ответы:
Я не знаю, как вы можете достичь этого с помощью sed, но это решение, которое работает с tr:
tr < file-with-nulls -d '\000' > file-without-nulls
Это решение, sedкоторое работает в некоторых случаях, но не во всех:
sed 's/\x0//g' file1 > file2
Это решение, которое включает замену на пробелы, которые должны работать во всех случаях:
sed 's/\x0/ /g' file1 > file2
-iпараметр для преобразования файла на место.
trопрокинул некоторые другие байты в моем файле и sedничего не заменил. Я сделал это не sedв Python:
f = open('file-with-0bytes.dump')
for l in f.readlines():
print l.replace("\0", '')
Вот трубный однострочник:
python -c 'import sys; sys.stdout.write(sys.stdin.read().replace("\0", ""))'
Я также заметил, что некоторые команды фактически оставляют там нулевые байты, но они больше не видны, по крайней мере, в терминале OSX. Я использовал hexdumpдля отладки этого.
Использовать Perl для выполнения регулярных выражений довольно просто. Просто замените sedна perl -np -e:
$ printf 'one\0two\0' | perl -np -e 's/\0/\n/g'
one
two
С -nопцией, регулярные выражения запускаются строка за строкой, как sed.
Если вы хотите использовать нулевые байты в качестве разделителей записей, используйте параметр Perl -0.
$ 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
Вы можете посмотреть параметры командной строки Perl, запустив perldoc perlrun.
Чтобы соответствовать нулевому байту, я использую это регулярное выражение с SED Cygwin:
[^ \ X01- \ x7F]