【问题标题】:Delete specific character range in sed with special characters使用特殊字符删除 sed 中的特定字符范围
【发布时间】:2019-02-26 18:14:35
【问题描述】:

我想要整理的回复是:

ServerID 响应:142[90m[39mtestRuntime

我正在尝试以下列方式对其进行格式化

ServerID 响应:142 testRuntime

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

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

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

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

提前致谢

【问题讨论】:

  • 使用sed 's/\[90m\[39m//g',问题是您将整个模式放入括号表达式中,并在不应该出现的地方使用了单词边界。
  • @WiktorStribiżew 非常感谢,这已经解决了问题。

标签: bash sed


【解决方案1】:

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

使用

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

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

【讨论】:

    猜你喜欢
    • 2021-10-29
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    相关资源
    最近更新 更多