Как я могу отредактировать большой файл на месте?

Парсинг вывода ls редко хорошая идея, но получение первых нескольких полей является исключением, оно на самом деле работает над всеми “традиционными” нельдами (оно не работает над платформами, такими как некоторые реализации Windows, которые позволяют пробелы в именах пользователей).

ls -ld /path/to/directory | awk 'NR==1 {print $3}'

Другая опция состоит в том, чтобы использовать a stat команда, но проблема с stat от оболочки то, что существует несколько команд с другим синтаксисом, таким образом, stat в сценарии оболочки является непортативным (даже через установки Linux).

Обратите внимание, что тестирование, является ли данный пользователь владельцем, является другим суждением.

if [ -n "$(find . -user "$username" -print -prune -o -prune)" ]; then
  echo "The current directory is owned by $username."
fi
if [ -n "$(find . -user "$(id -u)" -print -prune -o -prune)" ]; then
  echo "The current directory is owned by the current user."
fi

18
21.05.2011, 00:39
5 ответов

Попытайтесь использовать hexedit, я не попробовал его на HP-UX, но он должен работать. Это позволяет Вам перемещаться в местоположение в файле и усеченный. Я вполне уверен, что это не читает целый файл в, но просто ищет на соответствующее местоположение для дисплея.

Использование довольно просто, после того как Вы запустили его, клавиши со стрелками позволяют Вам перемещаться. F1 дает справку. Ctrl-G перемещается в местоположение в файле (подсказка: для перемещения для окончания используют размер файла от нижнего ряда дисплея). Расположите курсор на первый байт, что Вы хотите усечь и затем нажать Escape T, после того как Вы подтверждаете, что усеченное будет сделано. Выходы Ctrl-x.

10
27.01.2020, 19:46

Сократите 2 килобайта из конца файла:

truncate -s-2K file
14
27.01.2020, 19:46

Можно использовать dd, например:

dd if=yourfile of=outname bs=4k count=thefirstX4kb
6
27.01.2020, 19:46
  • 1
    спасибо за Ваш ответ. Я предпочитаю редактировать файл на месте для сохранения дискового пространства. Если ничто не поможет, то я буду использовать dd :-). А-ч –  Hemant 26.08.2010, 13:28

Можно использовать split или ed, awk или любой язык программирования.

1
27.01.2020, 19:46
  • 1
    Спасибо за Ваш ответ. Я предпочитаю редактировать файл на месте для сохранения дискового пространства и памяти. –  Hemant 26.08.2010, 20:31

Используйте инструмент, который предоставляет Вам доступ к truncate системный вызов. Можно сделать это только с инструментами POSIX. Предупреждение, введенный в браузер; будьте особенно осторожны как dd является еще более непрощающим ошибок, чем обычная команда Unix. 123456 число байтов для хранения.

dd if=/dev/null of=/file/to/truncate seek=1 bs=123456

Версия Perl намного более читаема:

perl -e 'truncate "$ARGV[0]", 123456 or die $!' /file/to/truncate
6
27.01.2020, 19:46

Теги

Похожие вопросы