Действительно ли возможно использовать вложенную команду grep?

Я имею в виду, когда я работаю

dpkg -s thunar | grep "Depends"

это отображает все зависимости для thunar файлового менеджера. Как работать, например

dpkg -s thunar | grep "Depends" | grep "gtk"

отобразить только зависимости, содержащие gtk на его имя?

0
задан 2 December 2018 в 16:30

4 ответа

$ dpkg -s nautilus | grep "Depends" | grep -o "\S*gtk\S*"
libgtk-3-0

Объяснение:

  • -o - Распечатайте только часть соответствия строки
  • \S* - Нуль или больше непробельных символов

Если Вы хотите номер версии также:

$ dpkg -s nautilus | grep "Depends" | grep -o "\S*gtk[^,]*"
libgtk-3-0 (>= 3.9.12)
  • [^,]* - Нуль или больше символов, которые не являются запятыми
1
ответ дан 27 October 2019 в 00:48

Я разделил бы пакеты в отдельных строках, чтобы быть grepплетеная корзинка с tr:

$ dpkg -s vivaldi-stable | grep "^Depends" | tr ',' '\n' | grep "gtk"
 libgtk-3-0 (>= 3.21.4)
2
ответ дан 27 October 2019 в 00:48

Путем Вы вводите свой пример, должен также работать, но можно сделать...

dpkg -s thunar | grep 'Depends.*gtk'

... если gtk всегда, после Зависит

Пример:

$ dpkg -s nautilus | grep -E 'Depends.*gtk'
Depends: libatk1.0-0 (>= 1.32.0), libc6 (>= 2.14), libcairo-gobject2 (>= 1.10.0), libcairo2 (>= 1.14.0), libdbusmenu-glib4 (>= 0.4.2), libexempi3 (>= 2.4.0), libexif12 (>= 0.6.21-1~), libgail-3-0 (>= 3.0.0), libgdk-pixbuf2.0-0 (>= 2.25.2), libglib2.0-0 (>= 2.51.2), libgnome-autoar-0-0 (>= 0.2.1), libgnome-desktop-3-17 (>= 3.18.1), libgtk-3-0 (>= 3.22.6), libnautilus-extension1a (= 1:3.26.4-0ubuntu7), libpango-1.0-0 (>= 1.20.0), libpangocairo-1.0-0 (>= 1.14.0), libselinux1 (>= 2.0), libtracker-sparql-2.0-0 (>= 0.10.0), libunity9 (>= 3.4.6), libx11-6, libzeitgeist-2.0-0 (>= 0.9.9), nautilus-data (= 1:3.26.4-0ubuntu7), shared-mime-info (>= 0.50), desktop-file-utils (>= 0.7), gvfs (>= 1.3.2), libglib2.0-data, gsettings-desktop-schemas (>= 3.8.0)
1
ответ дан 27 October 2019 в 00:48

grep соглашения со строками, поэтому после начального соответствия для Depends строка, необходимо разделить строку так или иначе. Это может быть, покончили grep -Po флаги, но это может быть немного сложно. Более простой путь и только через один конвейер состоит в том, чтобы использовать awk:

$ dpkg -s nautilus | awk '/Depends/{for(i=1;i<=NF;i++) {if($i~/gtk/) printf "%s\n",$i;}}'
libgtk-3-0
$ dpkg -s gedit | awk '/Depends/{for(i=1;i<=NF;i++) {if($i~/gtk/) printf "%s\n",$i;}}'
libgtk-3-0
libgtksourceview-3.0-1
gir1.2-gtk-3.0
gir1.2-gtksource-3.0

Это соответствует соответствующей строке и выполняет итерации по каждому "полю" или разделенному пробелом столбцу в строке, проверяя, содержит ли это gtk.

1
ответ дан 27 October 2019 в 00:48

Другие вопросы по тегам:

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