我的目的是搜索以(或由)给定字符串开头的软件包,因为从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
仅足够了,因为它也支持Regexes(例如,请参阅此博客文章)。
这就是我所得到的。不幸的是,我无法将所有写入一个命令的所有内容组合在一起(我打算写一个别名或函数)。
您可以尝试以下(如果我正确地得到),因为您提到的字符串仅在第一个和第二个空间之间,以便将其变成线路的第二个字段。现在,如果我们想检查第二字段的值,我已经为第二个字段提供了条件,以检查当前行的第二个字段是否是vivaldi
,然后进行打印。
pacman -Sl | awk '$2~/vivaldi/{print $2, $3, $4, $1}'
根据OP的评论,请在[
和]
中包装$1
,因此请立即添加以下内容。
pacman -Sl | awk '$2~/vivaldi/{print $2, $3, $4, "[" $1 "]"}'