处理控制字符

Ben*_*ton 3 linux sed regular-expression

我有一个日志文件,其中包含一堆不可见的控制字符,例如十六进制 \u0003。

我想使用 SED 之类的东西替换它,但无法使正则表达式的第一部分匹配:

/s/^E/some_string

我通过按 CTRL-V CTRL-0 CTRL-3 创建特殊字符来创建 ^E,如从“man ascii”页面读取的那样:

003 3 03等

但是,没有任何内容与该控制字符匹配。

任何帮助表示赞赏!

dog*_*ane 5

您也可以使用该tr命令。例如:

删除控制字符:

tr -d '\033' < file
Run Code Online (Sandbox Code Playgroud)

要将控制字符替换为另一个控制字符:

tr '\033' 'x' < file
Run Code Online (Sandbox Code Playgroud)

如果您不确定控制字符的值是什么,请执行八进制转储,它将打印出来:

$ cat file
hello
^[
world

$ od -b file    
0000000 150 145 154 154 157 012 033 012 167 157 162 154 144 012
0000016
Run Code Online (Sandbox Code Playgroud)

所以控制字符的值为^[\033