我有一个当前安装的内核列表,并且我试图grep出当前安装的内核和先前安装的内核。对于此示例,linux-image-3.2.0-60-generic是当前正在运行的内核,并且这些是已安装的内核:
linux-image-3.2.0-49-generic
linux-image-3.2.0-51-generic
linux-image-3.2.0-52-generic
linux-image-3.2.0-53-generic
linux-image-3.2.0-54-generic
linux-image-3.2.0-55-generic
linux-image-3.2.0-56-generic
linux-image-3.2.0-57-generic
linux-image-3.2.0-58-generic
linux-image-3.2.0-59-generic
linux-image-3.2.0-60-generic
linux-image-3.2.0-61-generic
linux-image-3.2.0-63-generic
linux-image-3.2.0-64-generic
我可以用来grep -v $(uname -r)
从该列表中删除当前正在运行的内核。但是,我似乎无法用来grep -v -B 1 $(uname -r)
从列表中删除当前和以前的内核。有没有一种方法可以将-B
和相结合-v
?还是我完全从错误的方向来解决这个问题?
您可以使用2个grep来获得所需的东西。内部grep
将为当前内核uname -r
以及先前的版本生成匹配项的“列表” 。外部grep
将为您提供不包括这两个内核的内核列表。
$ grep -v "$(grep -B 1 "$(uname -r)" list.txt)" list.txt
为了模拟您所拥有的内容,我已将这些内容添加到文件中list.txt
。
$ cat list.txt
linux-image-3.2.0-49-generic
linux-image-3.2.0-51-generic
linux-image-3.2.0-52-generic
linux-image-3.2.0-53-generic
linux-image-3.2.0-54-generic
linux-image-3.2.0-55-generic
linux-image-3.2.0-56-generic
linux-image-3.2.0-57-generic
linux-image-3.2.0-58-generic
linux-image-3.2.0-59-generic
linux-image-3.2.0-60-generic
linux-image-3.2.0-61-generic
linux-image-3.2.0-63-generic
linux-image-3.2.0-64-generic
现在,让我们假装该命令uname -r
返回以下字符串:
$ uname -r
3.2.0-60-generic
因此,当我运行此命令时,我得到的是内核列表,减去uname -r
以及之前的版本。
$ grep -v "$(grep -B 1 "3.2.0-60-generic" list.txt)" list.txt
linux-image-3.2.0-49-generic
linux-image-3.2.0-51-generic
linux-image-3.2.0-52-generic
linux-image-3.2.0-53-generic
linux-image-3.2.0-54-generic
linux-image-3.2.0-55-generic
linux-image-3.2.0-56-generic
linux-image-3.2.0-57-generic
linux-image-3.2.0-58-generic
linux-image-3.2.0-61-generic
linux-image-3.2.0-63-generic
linux-image-3.2.0-64-generic
所有这些都假定其中的内核列表list.txt
是经过排序的格式。
如果您有兴趣,我会在此问答中写一个A题为:如何以编程方式确定已安装的最高版本内核RPM?在这里,我展示了如何使用解析出内核版本sort -V
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句