Вопрос или проблема
Когда я даю следующую команду:
apt-cache search git | wc -l
Я получаю ответ 756. Как я могу перечислить только около полудюжины приложений, связанных с git?
Поиск с использованием анкоров (^...
)
Вы можете просто искать записи, которые начинаются со строки “git”, вот так.
Пример
$ apt-cache search ^git | head -10
git - быстрый, масштабируемый, распределенный система управления версиями
git-core - быстрый, масштабируемый, распределенный система управления версиями (устарело)
git-doc - быстрый, масштабируемый, распределенный система управления версиями (документация)
git-man - быстрый, масштабируемый, распределенный система управления версиями (страницы руководства)
gitk - быстрый, масштабируемый, распределенный система управления версиями (визуализатор дерева версий)
easygit - git для обычных смертных
gforge-plugin-scmgit - плагин Git для FusionForge (переходной пакет)
git-all - быстрый, масштабируемый, распределенный система управления версиями (все подпаки)
git-annex - управление файлами с git, без проверки их содержимого в git
git-arch - быстрый, масштабируемый, распределенный система управления версиями (взаимодействие с arch)
Это тонкое отличие от просто поиска строки “git”, но разница в том, что этот поиск найдет подстроки, которые начинаются с “git”, тогда как обычный поиск “git” вернет записи, такие как “digital”.
Вы также можете ограничить вывод apt-cache search ^git
, направив вывод в дополнительный grep
вот так:
Фильтр с использованием grep
$ apt-cache search ^git | grep "^git" | head -10
git - быстрый, масштабируемый, распределенный система управления версиями
git-core - быстрый, масштабируемый, распределенный система управления версиями (устарело)
git-doc - быстрый, масштабируемый, распределенный система управления версиями (документация)
git-man - быстрый, масштабируемый, распределенный система управления версиями (страницы руководства)
gitk - быстрый, масштабируемый, распределенный система управления версиями (визуализатор дерева версий)
git-all - быстрый, масштабируемый, распределенный система управления версиями (все подпаки)
git-annex - управление файлами с git, без проверки их содержимого в git
git-arch - быстрый, масштабируемый, распределенный система управления версиями (взаимодействие с arch)
git-buildpackage - набор для помощи с пакетами Debian в репозиториях Git
git-cola - высоко кофеинизированный графический интерфейс для git
Это покажет только пакеты, названия которых начинаются со строки “git”.
Использовать переключатель --names-only
Это будет искать совпадения только в названиях пакетов, которые начинаются со строки “git”.
$ apt-cache search --names-only ^git | head -10
git - быстрый, масштабируемый, распределенный система управления версиями
git-core - быстрый, масштабируемый, распределенный система управления версиями (устарело)
git-doc - быстрый, масштабируемый, распределенный система управления версиями (документация)
git-man - быстрый, масштабируемый, распределенный система управления версиями (страницы руководства)
gitk - быстрый, масштабируемый, распределенный система управления версиями (визуализатор дерева версий)
git-all - быстрый, масштабируемый, распределенный система управления версиями (все подпаки)
git-annex - управление файлами с git, без проверки их содержимого в git
git-arch - быстрый, масштабируемый, распределенный система управления версиями (взаимодействие с arch)
git-buildpackage - набор для помощи с пакетами Debian в репозиториях Git
git-cola - высоко кофеинизированный графический интерфейс для git
Скорее всего, потому что это:
apt-cache show libqt5sensors5 | grep -i git
Version: 5.0~git20130507-0ubuntu1~raring1~test1
WARNING: This module is not an official part of Qt 5, but instead a git
Version: 5.0~git20130115-0ubuntu1
Filename: pool/universe/q/qtsensors-opensource-src/libqt5sensors5_5.0~git20130115-0ubuntu1_amd64.deb
Некоторые пакеты связаны с “git”, другие просто имеют “git” где-то в описании, так как apt-cache search
ищет не только в названиях пакетов, но и в коротких/длинных описаниях.
Как я могу перечислить только около полудюжины приложений, связанных с git?
apt-cache search git | grep -i git
Это покажет только пакеты, которые имеют “git” в кратком описании или в названии пакета.
Ответ или решение
Теория
Когда вы выполняете команду apt-cache search git | wc -l
, вы ищете каждую строку, содержащую слово "git" в кэше пакетов APT. Это приводит к значительному числу совпадений, как в вашем случае — 756. Причина в том, что apt-cache search
не ограничивает свою область поиска только именами пакетов, а исследует также описания пакетов, включая как короткие, так и длинные описания. Таким образом, любое вхождение "git" в любом из этих текстов будет учитываться в выводе. В результате, вы получаете много случайных совпадений, где "git" может быть частью другой строки, например, как в версии пакета "libqt5sensors5" из вашего примера, где "git" встречается в описании, а не в названии.
Пример
Возьмем, к примеру, вывод команды apt-cache search git
, который может содержать пакеты, никак не связанные с системой контроля версий Git, а лишь упоминающие "git" в описаниях. Примером такого совпадения может быть "digital", в котором "git" является частью слова, а не отдельным именем.
Применение
Для того чтобы сократить количество результатов и получить только те пакеты, которые непосредственно связаны с Git, необходимо использовать поисковые фильтры и регулярные выражения.
-
Поиск по началу строки: Используйте команду
apt-cache search ^git
, чтобы искать только те пакеты, имена которых начинаются с "git". Символ "^" в регулярных выражениях указывает на начало строки, что снижает количество совпадений до тех, которые действительно начинаются с "git".apt-cache search ^git | head -10
-
Использование grep для уточнения поиска: Вы можете дополнительно фильтровать результаты с помощью команды
grep
, чтобы получить строки, начинающиеся с "git".apt-cache search ^git | grep "^git" | head -10
-
Опция
--names-only
: Командаapt-cache search --names-only ^git
ограничит поиск только названиями пакетов, исключая из рассмотрения описания.apt-cache search --names-only ^git | head -10
Эти подходы помогут вам получить более узкий список пакетов, которые явно связаны с Git, не рассматривая множество несущественных для вашего поиска записей. Это позволит эффективно находить интересующие пакеты без лишних отвлечений.
Заключение
Если вы хотите найти именно те пакеты, которые связаны с Git, важно использовать локальные фильтрационные техники, такие как регулярные выражения и дополнительные параметры командной строки. Это позволит максимально ограничить область поиска и сфокусироваться на действительно релевантной информации. Помимо этого, рассмотренный подход демонстрирует, как интегрированное использование утилит Unix, таких как head
и grep
, может значительно улучшить вашу продуктивность в управлении пакетами на системах на базе Ubuntu/Debian.