如何在grep中组合-v和-B开关?

日汉

我有一个当前安装的内核列表,并且我试图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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

grep的-A -B -C开关是否有其他选择(在之前和之后打印几行)?

一起使用 grep -A 和 -v 开关

如何在Linux中组合ls -v和转换命令

比较枚举和开关的组合?

开关和其他组合

蜂巢-如何通过A列和B列组合分组以及如何在C列上组合分组

如何在文本中搜索 Ctr+v 和 Ctrl+b?

如何在Bootstrap-Vue的b-col和b-row中使用v-for?

如何获取列表的所有可能组合以放入字典中,例如(a,b)和(b,a)?

如何在同一命令中执行grep -v -e'expr1'和grep -e'expr2'?

如何在Flutter中添加用于隐藏和查看密码的切换开关?

如何在 HTML、CSS 和 Javascript (vanilla) 中制作切换开关词

终端中的“ git init -b <分支名称>”命令抛出“未知开关”错误

复制/ b和Findstr / v

如何在SQL中识别数字和字符的组合

如何在python中剥离数字和句点的组合?

如何在Elasticsearch查询中组合“必须”和“应该”?

如何在ANTLR中启用orExpression和andExpression规则的组合?

如何在javascript中组合名字和姓氏?

如何在xunit / autofixture中组合PropertyData和AutoNSubstituteData属性?

如何在Android中组合音频和视频

如何在单个函数中组合“ onKeypress”和“ onClick”事件

如何在JUnit 4.12中组合@Rule和@ClassRule

如何在验证列表中组合范围和确定的值?

如何在querySelector中组合属性和nth-of-type?

如何在Haskell中组合过滤器和映射

如何在Schematron中组合名称空间和元素的路径?

如何在SwiftUI中组合旋转和淡出动画

如何在flutter中返回SliverAppBar和SliverList的组合