搜索(正则)匹配,然后在Linux中重新格式化输出



我的目的是搜索以(或由)给定字符串开头的软件包,因为从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

但是,这不是一个很好的方法,因为它将grepawk一起使用,但是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 "]"}'

相关内容

  • 没有找到相关文章

最新更新