sed替换文字TAB

时间:2011-12-06 13:22:54

标签: sed freebsd

我想通过从ZSH shell运行TAB,用分号替换stdout中的sed

我理解通常(在其他shell中)可以使用:

somecommand | sed 's/\t/;/g'

但是,在FreeBSD下的ZSH-shell中,这对我不起作用。 \t与制表符不匹配。这是为什么?我也试过多个反斜杠(最多5个)。


这确实有效:

somecommand | sed 's/[TAB]/;/g'

,其中[TAB]是一个实际的TAB字符,通过输入Ctrl-V后面的键盘上的TAB按钮插入。

3 个答案:

答案 0 :(得分:8)

使用zsh与它无关。 \t是sed中使用的正则表达式的GNU扩展。在BSD sed上,您没有扩展名,因此必须使用文字选项卡。

答案 1 :(得分:3)

一个选项是使用printf提前准备sed脚本。

scr="`printf 's/\t/;/g'`"
somecommand | sed "$scr"

但Michael ++ ......可能还有其他的sed变种也支持printf式转义,但它肯定不是“标准”。

答案 2 :(得分:0)

如果您知道该命令的输出是普通文本(仅限标签和可打印文本),您可以使用:

somecommand | sed -E 's/[[:cntrl:]]/;/g'

-E开启"延长"正则表达式,可以包含字符类名称。