首页 > 解决方案 > 使用特殊字符删除 sed 中的特定字符范围

问题描述

我试图整理的回应是:

ServerID 响应:142[90m[39mtestRuntime

我正在尝试以下列方式使其格式化

ServerID 响应:142 测试运行时

我相信 [90m 和 [39 是来自另一个 CLI 工具的一些控制字符,因为当我不添加时它们显示为空格: tr -dc '[:print:]在回显响应之前。

我已经构建了以下 sed 命令,但它在 testRuntime 中删除了一个额外的 M:

tr -dc '[:print:]' | sed 's/[\<\[90m\[39m\>]//g'

我将如何制作包含特殊字符的精确匹配命令,但前提是整个序列匹配?

提前致谢

标签: bashsed

解决方案


外部方括号[\<\[90m\[39m\>]形成一个括号表达式,它匹配其中定义的单个字符。仅删除括号并不能解决您正在使用的问题,\<并且\>不打算在此处使用的单词边界因为[90m[39m必须在任何上下文中删除。

利用

sed 's/\[90m\[39m//g'

这将删除文件中任意位置的任意数量的[90m[39m行。


推荐阅读