Как бы отредактирвоать большой файл (100Гб) ?
Требуется заменить один байт на другой по всему файлу.Вроде может sed 's/1/4/g' test.log
Но он не сохраняет результат в исходном файле.Хелп.
>Как бы отредактирвоать большой файл (100Гб) ?
>Требуется заменить один байт на другой по всему файлу.
>
>Вроде может sed 's/1/4/g' test.log
>Но он не сохраняет результат в исходном файле.В Linux сохраняет, если вызван с ключиком -i
Но, ещё рекомендую попробовать тоже самое проделать с помощью Perl:perl -pi -e 's|1|4|g' test.log (пишу по памяти)
Есть вероятность, что Perl справиться с этим быстрее (плюс он более портабельный)
>[оверквотинг удален]
>
>В Linux сохраняет, если вызван с ключиком -i
>
>
>Но, ещё рекомендую попробовать тоже самое проделать с помощью Perl:
>
>perl -pi -e 's|1|4|g' test.log (пишу по памяти)
>
>Есть вероятность, что Perl справиться с этим быстрее (плюс он более портабельный)
>Спасибо. Буду пробовать.
А не подскажите мне как бы сначала найти все строки в файле по заданной последовательности?
Хочетсья сначала посмотреть все строки, что буду редактировать.
>А не подскажите мне как бы сначала найти все строки в файле
>по заданной последовательности?Чтобы искать в файле, используйте grep. (А лучше даже fgrep, если ищете не по регулярному выражению.) Вот только не понял, что вы имели ввиду под "по заданной последовательности"?
>>А не подскажите мне как бы сначала найти все строки в файле
>>по заданной последовательности?
>
>Чтобы искать в файле, используйте grep. (А лучше даже fgrep, если ищете
>не по регулярному выражению.) Вот только не понял, что вы имели
>ввиду под "по заданной последовательности"?Помогите написать команду плз на sed:
требуется в большом файле сделать замену (строка содержит кавычки, $ и пробелы)
перед ENABLE двойной пробел, в других местах обычныйбыло: ALTER TRIGGER "MAIL$_0" ENABLE
стало: ALTER TRIGGER "MAIL$_0" ENOBLE
>[оверквотинг удален]
>>не по регулярному выражению.) Вот только не понял, что вы имели
>>ввиду под "по заданной последовательности"?
>
>Помогите написать команду плз на sed:
>требуется в большом файле сделать замену (строка содержит кавычки, $ и пробелы)
>
>перед ENABLE двойной пробел, в других местах обычный
>
>было: ALTER TRIGGER "MAIL$_0" ENABLE
>стало: ALTER TRIGGER "MAIL$_0" ENOBLEЗадача в целом следующая:
довольно часто нужно подправлять дампы баз. дампы большие от 100гб. дампы бинарные. однако ручное подправление нужных байтов их не портит.
нужно:
1) найти в файле нужное место,
2) подправить несколько байт,
3) найти это же место в файле и проверить, что исправление внесено.т.к. файлы большие и располагаются как правило на медленных рейдовых корзинках, то не хотелось бы чтобы утилита их копировала для своих нужд.
>1) найти в файле нужное место,
>2) подправить несколько байт,
>3) найти это же место в файле и проверить, что исправление внесено.
>
>
>т.к. файлы большие и располагаются как правило на медленных рейдовых корзинках, то
>не хотелось бы чтобы утилита их копировала для своих нужд.сед и перл не подойдут в случае уже имеющихся дампов; вообще хорошо было бы при получении дампов пропускать через трубу, то есть хорошо было бы знать, что именно придётся подправлять, но если уже имеется 100гиговый файл на партиции в 101 гиг работать можно только через циклическое определение места правки через вызов grep -ab (трактовать текстом и писать байтовые смещения) и собственно редактирование при помощи dd с опциями seek смещение и notrunc.
на линуксе работает с -i
на фре это не работает почемуто
>на линуксе работает с -i
>на фре это не работает почемутоПотому что это не стандартная опция (читай: нет в POSIX), а в Линуксе сделана для удобства. (Я не спроста выше написал, что Perl более портабелен.)
>на линуксе работает с -iРаботает создавая новый файл который в конце затирает источник.
Не совсем то, что хотел автор...