关于regex:如何在OS X上插入带有sed的制表符?

How can I insert a tab character with sed on OS X?

我已经尝试过:

1
echo -e"egg\t  \t\t salad" | sed -E 's/[[:blank:]]+/\t/g'

结果是:

1
eggtsalad

还有…

1
echo -e"egg\t  \t\t salad" | sed -E 's/[[:blank:]]+/\\t/g'

结果是:

1
egg\tsalad

我想要什么:

1
egg salad

尝试:ctrl+v,然后按t


使用ansi-c型报价:$'string'

1
sed $'s/foo/\t/'

因此,在您的示例中,只需添加一个$

1
echo -e"egg\t  \t\t salad" | sed -E $'s/[[:blank:]]+/\t/g'


osx的sed只理解模式中的\t,而不是替换模式中的\t,根本不理解\t,因为它本质上是1982年或此后留下的4.2bsd sed。使用文字标签(在bashvim中为Ctrl+VTab或安装gnu coreutils以获得更合理的sed


另一种选择是使用$(printf '\t')插入选项卡,例如:

1
echo -e"egg\t  \t\t salad" | sed -E"s/[[:blank:]]+/$(printf '\t')/g"


尝试AWK

1
echo -e"egg\t  \t\t salad" | awk '{gsub(/[[:blank:]]+/,"\t");print}'