是否可以嵌套使用 grep 命令?

是否可以嵌套使用 grep 命令?

我是说,当我跑步的时候

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

相关内容