web-dev-qa-db-ja.com

OS Xでsedを使用してタブ文字を挿入するにはどうすればよいですか?

私が試してみました:

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

結果:

eggtsalad

そして...

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

結果:

Egg\tsalad

私が欲しいもの:

Egg salad
63
Zach

試してください: Ctrl+V を押します Tab

79
yan

ANSI-Cスタイルの引用を使用:$'string'

sed $'s/foo/\t/'

したがって、あなたの例では、単に$

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

OSXのsed パターンでは\tのみを理解し、置換では理解しない \tをまったく理解していません。本質的には、1982年またはthenaboutsから残された古代の4.2BSD sedであるためです。リテラルタブ(bashおよびvimCtrl + VTab)を使用するか、またはGNU coreutilsは、より合理的なsedを取得します。

24
geekosaur

別のオプションは、$(printf '\t')を使用してタブを挿入することです。例:

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

awkを試す

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