sed:在搜索中搜索

sed:在搜索中搜索

全部:

我们如何使用 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: ....”开头的行上运行它。咒语是什么?或者,可能有更优雅的方法来做到这一点吗?

答案1

man sed会告诉你:

Sed commands can be given with ... one address, in which case the
command will only be executed for input lines which match that address;
...
/regexp/
          Match lines matching the regular expression regexp.

所以你可以这样做:

sed '/Package/ s/replace/stuff/'

相关内容