我想通过从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
按钮插入。
答案 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
开启"延长"正则表达式,可以包含字符类名称。