Ответ 1
Попробуйте: Ctrl + V, а затем нажмите Tab.
Я пробовал:
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.
OSX sed
понимает только вообще не понимает \t
в шаблоне, а не в замене\t
, так как по существу это древний 4.2BSD sed
, оставшийся от 1982 или далее. Используйте литеральную вкладку (которая в bash
и vim
равна Ctrl
+ V
, Tab
), или установите GNU coreutils
, чтобы получить более разумный sed
.
Используйте цитирование стиля ANSI-C: $'string'
sed $'s/foo/\t/'
Итак, в вашем примере просто добавьте $
:
echo -e "egg\t \t\t salad" | sed -E $'s/[[:blank:]]+/\t/g'
Другой вариант - использовать $(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}'