【发布时间】:2019-07-28 08:02:45
【问题描述】:
我的目标是搜索以给定字符串开头(或由给定字符串组成)的软件包,因为使用 Arch Linux 的命令 pacman 无法做到这一点。查找包最简单的方法是执行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 就足够了,因为它还支持正则表达式(例如see this blog post)。
这就是我所得到的。不幸的是,我无法将我编写的所有内容组合到一个命令中(我打算编写一个别名或函数)。
【问题讨论】:
标签: regex shell awk command-line