全部:
我们如何使用 sed 按两个条件过滤行?
aptitude -v show '?name(grep)' | egrep --color=always "^|grep" | sed 's/^\(Package: .*\)$/\x1b[33;1m\1\x1b[0m/'
在上面,我要做的是首先使用 grep 为我的搜索字符串(本例中为“grep”)找到的任何匹配项着色,然后为 aptitude 输出中的所有“Package: ...”标题行着色黄色. 但是,如果任何 'Package: ...' 行之前已通过 egrep ... 命令添加了红色,则该行开始为黄色,为找到的 'grep' 字符串转换为红色,然后还原当找到 '\e[0m' 时变为正常颜色(如我所料)。
因此,在我看来,我要做的是找到任何“Package: ...”行,然后仅在这些行中删除可能的颜色代码,然后再将整行着色为黄色。
sed "s,\x1B\[[0-9;]*[a-zA-Z],,g"
... 将删除代码,但我只需要在以“Package: ....”开头的行上运行它。咒语是什么?或者,可能有更优雅的方法来做到这一点?
man sed
会告诉你:所以你可以这样做: