122 votes

Pourquoi sed ne reconnaît-il pas\t comme un onglet ?

sed "s/\(.*\)/\t\1/" $filename > $sedTmpFile && mv $sedTmpFile $filename

Je m'attends sed %-% insère un tab devant chaque ligne dans $filename, mais ce n'est pas le cas. Pour une raison quelconque, il insère un t la place.

146voto

Mark Byers Points 318575

Toutes les versions de sed ne comprennent pas \t. Il suffit d'insérer un onglet littéral à la place (appuyez sur Ctrl-V puis Tab).

46voto

sedit Points 51

En utilisant Bash, vous pouvez insérer un caractère d'ONGLET de manière programmatique comme ceci :

TAB=$'\t' 
echo 'line' | sed "s/.*/${TAB}&/g" 
echo 'line' | sed 's/.*/'"${TAB}"'&/g'   # use of Bash string concatenation

9voto

Thomas Bratt Points 10738

J'ai utilisé quelque chose comme ça avec un shell Bash sur Ubuntu 12.04 (LTS) :

Pour ajouter une nouvelle ligne avec l'onglet,deuxième lorsque la première est appariée :

sed -i '/first/a \\t second' filename

Pour remplacer d'abord par l'onglet,deuxièmement :

sed -i 's/first/\\t second/g' filename

5voto

robrecord Points 184

Utilisez $(echo '\t'). Vous aurez besoin de citations autour du motif.

Par exemple, pour supprimer un onglet :

sed "s/$(echo '\t')//"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X