Как я могу вставить символ табуляции с помощью sed в OS X? - PullRequest
61 голосов
/ 23 марта 2011

Я пробовал:

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

Ответы [ 5 ]

77 голосов
/ 23 марта 2011

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

30 голосов
/ 25 июня 2016

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

sed $'s/foo/\t/'

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

echo -e "egg\t  \t\t salad" | sed -E $'s/[[:blank:]]+/\t/g'
24 голосов
/ 23 марта 2011

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

14 голосов
/ 21 января 2015

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

echo -e "egg\t  \t\t salad" | sed -E "s/[[:blank:]]+/$(printf '\t')/g"
1 голос
/ 23 марта 2011

попробуй awk

echo -e "egg\t  \t\t salad" | awk '{gsub(/[[:blank:]]+/,"\t");print}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...