Mar*_*ter 6 sed text-processing escape-characters
我的输入来自包含特殊转义字符的管道。为了便于说明,该流如下所示:
printf "foo.bar\033[00m" > file
cat file
Run Code Online (Sandbox Code Playgroud)
如何删除尾随.bar\033[00m?我已尝试以下方法,但这不起作用:
cat file | sed 's/\.bar\033[00m//'
Run Code Online (Sandbox Code Playgroud)
如果您的文件包含控制字符,例如
printf "foo.bar\033[00m" > file
Run Code Online (Sandbox Code Playgroud)
然后删除特定的、单个出现的.bar\033[00m写入以下内容:
sed $'s/\.bar\033\[00m//'
Run Code Online (Sandbox Code Playgroud)
要删除整个文件中的所有转义序列:
sed $'s/\033\[[0-9;]*m//g'
Run Code Online (Sandbox Code Playgroud)
单引号字符串前的美元 ( $'some text') 指示 shell 将 ANSI C 引用应用于字符串的内容,就像这样printf做一样。这是生成“转义”ASCII 字符 ( 0x1B/ 033/...) 所必需的。
该角色也可以通过键盘快捷键生成(没有$'必要):
sed 's/\.barCtrl-vESC\[00m//'
击中后,您应该在屏幕上Ctrl-vESC看到,但不是文字和(两个字符),而是一个控制字符。^[^[
原答案
如果你想在输出foo中
printf '%s' 'foo.bar\033[00m' | sed 's/\.bar\\033\[00m//'
Run Code Online (Sandbox Code Playgroud)
请注意,两个\和 都[必须被另一个 转义\。此外,我还添加了'%s'toprintf将输入字符打印为文字字符串,否则\033[可能会被解释为转义代码,后跟 ANSI 颜色。