awk -F, 'length($26) != 10 { print }' /path/to/input > bad_field_length.txt
Способ замены двоичного файла на другой в Debian так, чтобы он пережил обновления пакетов (например, замена файла init пакета BIND), заключается в перенаправлении файлов.
В основном, при переадресации файлов исходный файл устанавливается/перемещается в другое место и инструктирует систему управления пакетами помещать все последующие обновления установки этого файла в новое место, оставляя нетронутым исходное место.
Согласно руководству Debian - диверсии, в вашем случае:
dpkg-divert --divert /usr/local/share/PeaZip/res/7z/7z.old --rename /usr/bin/7z
cp /usr/local/share/PeaZip/res/7z/7z /usr/bin/7z
Чтобы удалить диверсию:
dpkg-divert --remove /usr/bin/7z
Сделайте резервные копии обоих двоичных файлов перед попыткой диверсии.
Дополнительные команды см: Замена двоичных файлов и файлов с помощью dpkg-divert
Другой более простой альтернативой является сохранение исходного пакета, например, указание менеджеру пакетов не применять к нему обновления, и копирование нового двоичного файла как в:
echo "p7zip hold" | dpkg --set-selections
или проще:
apt-mark hold p7zip
См: Как предотвратить обновление пакета в Debian
Другим, но более чистым вариантом будет сборка deb с новой версией p7zip, однако, поскольку метод и конкретные шаги зависят от пакетов, я не буду пытаться описать это здесь.
В дополнение к ответу, данному Руи Ф. Рибейро выше, я хотел бы внести update-alternatives
в таблицу. Очень удобно управлять переключением между различными двоичными файлами, доступными для одной и той же программы.
Во-первых, проверьте, является ли установленный двоичный файл фактическим двоичным файлом в /usr/bin
или просто символической ссылкой. Это можно сделать с помощью ls -la
, например:
$ ls -la $(which 7z)
# If it is a binary, it will look like this:
-rwxr-xr-x 1 root root 39 Aug 15 2016 /usr/bin/7z
# If a symlink, something like this:
lrwxrwxrwx 1 root root 20 Apr 9 12:58 /usr/bin/7z -> /some/another/path/7z
Если вы нашли двоичный файл, переместите его из текущего местоположения с помощью команды dpkg-divert
:
$ sudo dpkg-divert --divert /usr/bin/7z.dist --rename /usr/bin/7z
Теперь вы можете использовать менеджер альтернатив. Команда имеет следующий формат:
$ sudo update-alternatives --install <link> <name> <path> <priority>
Добавить оба двоичных файла в группу альтернатив 7z
:
$ sudo update-alternatives --install /usr/bin/7z 7z /usr/bin/7z.dist 10
$ sudo update-alternatives --install /usr/bin/7z 7z /usr/local/share/PeaZip/res/7z/7z 20
Будет создана символическая ссылка по адресу /usr/bin/7z
, указывающая на двоичный файл с наивысшим приоритетом в списке. Если по какой-либо причине вам нужно переключиться между двоичными файлами, просто сделайте это:
$ sudo update-alternatives --config 7z
Интерактивная подсказка спросит вас, какой двоичный файл использовать:
There are 2 choices for the alternative 7z (providing /usr/bin/7z).
Selection Path Priority Status
-------------------------------------------------------------------------
* 0 /usr/local/share/PeaZip/res/7z/7z 20 auto mode
1 /usr/bin/7z.dist 10 manual mode
2 /usr/local/share/PeaZip/res/7z/7z 20 manual mode
Press <enter> to keep the current choice[*], or type selection number:
Введите нужный номер Selection
и нажмите клавишу ввода. Сделанный! Преимущество этого подхода в том, что он применяет -ко всей системе и немедленно, включая все открытые сеансы оболочки. Нет необходимости манипулировать PATH
,также упрощается возврат к исходному бинарному файлу, когда вам это нужно.