URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8756
[ Назад ]

Исходное сообщение
"Редактирование большого файла"

Отправлено microbash , 27-Май-10 12:15 
Как бы отредактирвоать большой файл (100Гб) ?
Требуется заменить один байт на другой по всему файлу.

Вроде может sed 's/1/4/g' test.log
Но он не сохраняет результат в исходном файле.

Хелп.


Содержание

Сообщения в этом обсуждении
"Редактирование большого файла"
Отправлено phpcoder , 27-Май-10 12:18 
>Как бы отредактирвоать большой файл (100Гб) ?
>Требуется заменить один байт на другой по всему файлу.
>
>Вроде может sed 's/1/4/g' test.log
>Но он не сохраняет результат в исходном файле.

В Linux сохраняет, если вызван с ключиком -i


Но, ещё рекомендую попробовать тоже самое проделать с помощью Perl:

perl -pi -e 's|1|4|g' test.log (пишу по памяти)

Есть вероятность, что Perl справиться с этим быстрее (плюс он более портабельный)


"Редактирование большого файла"
Отправлено microbash , 27-Май-10 12:36 
>[оверквотинг удален]
>
>В Linux сохраняет, если вызван с ключиком -i
>
>
>Но, ещё рекомендую попробовать тоже самое проделать с помощью Perl:
>
>perl -pi -e 's|1|4|g' test.log (пишу по памяти)
>
>Есть вероятность, что Perl справиться с этим быстрее (плюс он более портабельный)
>

Спасибо. Буду пробовать.
А не подскажите мне как бы сначала найти все строки в файле по заданной последовательности?
Хочетсья сначала посмотреть все строки, что буду редактировать.


"Редактирование большого файла"
Отправлено phpcoder , 27-Май-10 12:38 
>А не подскажите мне как бы сначала найти все строки в файле
>по заданной последовательности?

Чтобы искать в файле, используйте grep. (А лучше даже fgrep, если ищете не по регулярному выражению.) Вот только не понял, что вы имели ввиду под "по заданной последовательности"?



"Редактирование большого файла"
Отправлено microbash , 27-Май-10 16:02 
>>А не подскажите мне как бы сначала найти все строки в файле
>>по заданной последовательности?
>
>Чтобы искать в файле, используйте grep. (А лучше даже fgrep, если ищете
>не по регулярному выражению.) Вот только не понял, что вы имели
>ввиду под "по заданной последовательности"?

Помогите написать команду плз на sed:
требуется в большом файле сделать замену (строка содержит кавычки, $ и пробелы)
перед ENABLE двойной пробел, в других местах обычный

было: ALTER TRIGGER "MAIL$_0"  ENABLE
стало: ALTER TRIGGER "MAIL$_0"  ENOBLE


"Редактирование большого файла"
Отправлено microbash , 27-Май-10 19:22 
>[оверквотинг удален]
>>не по регулярному выражению.) Вот только не понял, что вы имели
>>ввиду под "по заданной последовательности"?
>
>Помогите написать команду плз на sed:
>требуется в большом файле сделать замену (строка содержит кавычки, $ и пробелы)
>
>перед ENABLE двойной пробел, в других местах обычный
>
>было: ALTER TRIGGER "MAIL$_0"  ENABLE
>стало: ALTER TRIGGER "MAIL$_0"  ENOBLE

Задача в целом следующая:
довольно часто нужно подправлять дампы баз. дампы большие от 100гб. дампы бинарные. однако ручное подправление нужных байтов их не портит.
нужно:
1) найти в файле нужное место,
2) подправить несколько байт,
3) найти это же место в файле и проверить, что исправление внесено.

т.к. файлы большие и располагаются как правило на медленных рейдовых корзинках, то не хотелось бы чтобы утилита их копировала для своих нужд.


"grep и dd"
Отправлено Вова , 27-Май-10 22:45 
>1) найти в файле нужное место,
>2) подправить несколько байт,
>3) найти это же место в файле и проверить, что исправление внесено.
>
>
>т.к. файлы большие и располагаются как правило на медленных рейдовых корзинках, то
>не хотелось бы чтобы утилита их копировала для своих нужд.

сед и перл не подойдут в случае уже имеющихся дампов; вообще хорошо было бы при получении дампов пропускать через трубу, то есть хорошо было бы знать, что именно придётся подправлять, но если уже имеется 100гиговый файл на партиции в 101 гиг работать можно только через циклическое определение места правки через вызов grep -ab (трактовать текстом и писать байтовые смещения) и собственно редактирование при помощи  dd с опциями seek смещение  и notrunc.


"Редактирование большого файла"
Отправлено microbash , 27-Май-10 12:32 
на линуксе работает с -i
на фре это не работает почемуто


"Редактирование большого файла"
Отправлено phpcoder , 27-Май-10 12:39 
>на линуксе работает с -i
>на фре это не работает почемуто

Потому что это не стандартная опция (читай: нет в POSIX), а в Линуксе сделана для удобства. (Я не спроста выше написал, что Perl более портабелен.)


"Редактирование большого файла"
Отправлено svn , 27-Май-10 16:53 
>на линуксе работает с -i

Работает создавая новый файл который в конце затирает источник.
Не совсем то, что хотел автор...