私が試してみました:
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
試してください: Ctrl+V を押します Tab。
ANSI-Cスタイルの引用を使用:$'string'
sed $'s/foo/\t/'
したがって、あなたの例では、単に$
:
echo -e "Egg\t \t\t salad" | sed -E $'s/[[:blank:]]+/\t/g'
OSXのsed
パターンでは \t
のみを理解し、置換では理解しない\t
をまったく理解していません。本質的には、1982年またはthenaboutsから残された古代の4.2BSD sed
であるためです。リテラルタブ(bash
およびvim
でCtrl
+ V
、Tab
)を使用するか、またはGNU coreutils
は、より合理的なsed
を取得します。
別のオプションは、$(printf '\t')
を使用してタブを挿入することです。例:
echo -e "Egg\t \t\t salad" | sed -E "s/[[:blank:]]+/$(printf '\t')/g"
awkを試す
echo -e "Egg\t \t\t salad" | awk '{gsub(/[[:blank:]]+/,"\t");print}'