Как я могу вставить символ табуляции с sed в OS X?

Я пробовал:

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

Ответ 1

Попробуйте: Ctrl + V, а затем нажмите Tab.

Ответ 2

OSX sed понимает только \t в шаблоне, а не в замене вообще не понимает \t, так как по существу это древний 4.2BSD sed, оставшийся от 1982 или далее. Используйте литеральную вкладку (которая в bash и vim равна Ctrl + V, Tab), или установите GNU coreutils, чтобы получить более разумный sed.

Ответ 3

Используйте цитирование стиля ANSI-C: $'string'

sed $'s/foo/\t/'

Итак, в вашем примере просто добавьте $:

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

Ответ 4

Другой вариант - использовать $(printf '\t') для вставки вкладки, например:

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

Ответ 5

попробуйте awk

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