У меня экстремальная проблема, и все решения, которые я могу себе представить, сложны. Согласно моему опыту работы с UNIX / Linux, должен быть легкий путь.
Я хочу удалить первые 31 байт каждого файла в /foo/
. Каждый файл достаточно длинный. Ну, я уверен, что кто-нибудь предложит мне удивительно простое решение, которое я просто не могу себе представить. Может быть, awk?
text-processing
files
sed
awk
фон дер Танн
источник
источник
Ответы:
или быстрее, благодаря предложению Жиля:
Примечание: хвост Posix указывает «-c +32» вместо «+ 32c», но хвосту Solaris по умолчанию это не нравится:
/usr/xpg4/bin/tail
хорошо с обоими синтаксисами.источник
dd
здесь излишне,tail
более уместно (проще, меньше риск опечатки, нет ложных сообщений на stderr).cut
(разве это не должно быть хвостом? ... Асис, это не работает для меня .../usr/xpg4/bin
опередить/usr/bin
своегоPATH
, иначе вы застрянете в начале 1990-х. Многие юниты (например, GNU, BusyBox) больше не поддерживают исторический+32c
синтаксис и воспринимают его как файл, называемый+32c
(как требует POSIX).Следующие команды обрезают первые 31 байт из
$file
(используя$file~
как временную копию):Вам нужно только перечислить или
find
все файлы в/foo/
и выполнить два выше для каждого$file
найденного.источник
tail -c +32
выводит свой ввод минус первые 31 байт. (Да, аргумент отключен на единицу.) Чтобы отредактировать файл на месте, используйте губку в цикле, или, если у вас его нет и вы не хотите беспокоиться, выполните его работу в оболочке:Если команды прерваны по какой-либо причине (например, сбой питания), может быть трудно определить, где вы остановились. Запись новых файлов в отдельный каталог упростит задачу.
Если файлы действительно велики (например, достаточно велики, чтобы иметь две копии даже одной - это проблема), вы можете использовать один из методов, упомянутых в этой теме .
источник
Вы можете использовать Vim в режиме Ex:
%
выбрать все строки!
Команда Runx
сохранить и закрытьисточник