sed替换文字TAB

pop*_*tea 5 freebsd sed

我想通过从ZSH shell 运行来用分号替换TABs in .stdoutsed

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

somecommand | sed 's/\t/;/g'
Run Code Online (Sandbox Code Playgroud)

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


这确实有效:

somecommand | sed 's/[TAB]/;/g'
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*ber 8

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

  • @poplitea如果你的脚本只能在ksh93,bash或zsh中运行(而不是像pdksh,Bourne或者ash这样的其他sh变种),那么你可以在shell中使用`$'s /\t /; /'g`反斜杠扩展和`sed`是否看到文字制表符. (9认同)