web-dev-qa-db-fra.com

Comment puis-je insérer un caractère de tabulation avec sed sur OS X?

J'ai essayé:

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

Ce qui se traduit par:

eggtsalad

Et...

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

Ce qui se traduit par:

Egg\tsalad

Ce que je voudrais:

Egg salad
63
Zach

Essayer: Ctrl+V puis appuyez sur Tab.

79
yan

Utilisez le style ANSI-C en citant: $'string'

sed $'s/foo/\t/'

Donc, dans votre exemple, ajoutez simplement un $:

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

sed d'OSX ne comprend que \t dans le motif, pas dans le remplacement ne comprend pas \t du tout, car il s'agit essentiellement de l'ancienne version 4.2BSD sed de 1982 ou à peu près. Utilisez un onglet littéral (qui dans bash et vim est Ctrl + V, Tab), ou installez GNU coreutils pour obtenir un sed plus raisonnable.

24
geekosaur

Une autre option consiste à utiliser $(printf '\t') pour insérer un onglet, par exemple:

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

essayez awk

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