我是说,当我跑步的时候
dpkg -s thunar | grep "Depends"
它显示 thunar 文件管理器的所有依赖项。例如如何运行
dpkg -s thunar | grep "Depends" | grep "gtk"
仅显示名称中包含 gtk 的依赖项?
答案1
我将把这些包拆分成几行,然后分别进行grep
处理tr
:
$ dpkg -s vivaldi-stable | grep "^Depends" | tr ',' '\n' | grep "gtk"
libgtk-3-0 (>= 3.21.4)
答案2
$ 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)
[^,]*
- 零个或多个非逗号字符
答案3
您输入示例的方式也应该有效,但您可以这样做......
dpkg -s thunar | grep 'Depends.*gtk'
... 如果 gtk 总是位于 Depends 之后
例子:
$ 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)
答案4
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
。