Моя цель - поиск пакетов, которые начинаются (или состоят из) заданной строки, поскольку это невозможно с помощью команды pacman
из Arch Linux.Самый простой подход для поиска пакетов - выполнить pacman -Sl |grep vivaldi
, где vivaldi
- это имя пакета, которое даст:
herecura vivaldi 2.3.1440.60-1 [installed]
herecura vivaldi-ffmpeg-codecs 71.0.3578.98-1 [installed]
herecura vivaldi-snapshot 2.4.1468.4-1
Легко, как есть, у него есть поток: он ищет заданныйимя пакета везде, но имя пакета всегда между первым и вторым пробелом.Очень простой обходной путь к следующему
pacman -Sl | grep -P "(?:[a-z0-9-]+) vivaldi"
Консоль покажет вывод, подобный приведенному ниже:
herecura vivaldi 2.3.1440.60-1 [installed]
herecura vivaldi-ffmpeg-codecs 71.0.3578.98-1 [installed]
herecura vivaldi-snapshot 2.4.1468.4-1
Это даст (возможно)правильный результат, который совпадает с приведенным выше.Но есть еще одна оговорка: я хотел бы переставить вывод в форму:
vivaldi 2.3.1440.60-1 [herecura] [installed]
vivaldi-ffmpeg-codecs 71.0.3578.98-1 [herecura] [installed]
vivaldi-snapshot 2.4.1468.4-1 [herecura]
Я довольно близок к этому, выполнив команду:
pacman -Sl | grep -P "(?:[a-z0-9-]+) vivaldi" | awk '{print $2, $3, $4, $1}'
vivaldi 2.3.1440.60-1 [installed] herecura
vivaldi-ffmpeg-codecs 71.0.3578.98-1 [installed] herecura
vivaldi-snapshot 2.4.1468.4-1 herecura
vivaldi-snapshot-ffmpeg-codecs 72.0.3626.97-1 herecura
Однако это не очень хороший подход, так как он использует grep
с awk
, но awk
будет достаточно, поскольку он также поддерживает регулярные выражения (например, см. Этот пост ).
Это все, что я получаю.К сожалению, я не могу объединить все, что я написал, в одну команду (я планирую написать псевдоним или функцию).