Ich habe versucht:
echo -e "egg\t \t\t salad" | sed -E 's/[[:blank:]]+/\t/g'
Was in ... endet:
eggtsalad
Und...
echo -e "egg\t \t\t salad" | sed -E 's/[[:blank:]]+/\\t/g'
Was in ... endet:
egg\tsalad
Was ich möchte:
egg salad
Versuchen Sie: Ctrl+ Vund drücken Sie dann Tab.
Verwenden Sie ANSI-C-Anführungszeichen:
$'string'
sed $'s/foo/\t/'
Fügen Sie in Ihrem Beispiel einfach Folgendes hinzu
$
:echo -e "egg\t \t\t salad" | sed -E $'s/[[:blank:]]+/\t/g'
quelle
OSX
sed
versteht nurüberhaupt nicht\t
das Muster, nicht das Ersetzen\t
, da es sich im Wesentlichen um das alte 4.2BSD handelt,sed
das von 1982 oder später übrig geblieben ist. Verwenden Sie eine wörtliche Registerkarte (die inbash
undvim
istCtrl
+V
,Tab
) oder GNU installierencoreutils
eine angemessenere zu bekommensed
.quelle
"
Anführungszeichen hat die Shell den Backslash verarbeitet undsed
wird ihn nicht sehen. Beised
und regulären Ausdrücken im Allgemeinen wird das'
Zitieren stark bevorzugt.sed
, die etwas schlauer als die 4.2BSD war, aber tatsächlich ist die einzige Zeichenflucht, die es unterstützt, die\n
.sed
Verwendung ist in Linux.)Eine andere Option ist das
$(printf '\t')
Einfügen einer Registerkarte, z. B.:echo -e "egg\t \t\t salad" | sed -E "s/[[:blank:]]+/$(printf '\t')/g"
quelle
Ctrl+V Tab
da Sie den gesamten Befehl kopieren, einfügen und einfacher freigeben können, ohne das Steuerzeichen zu verlieren.versuche awk
echo -e "egg\t \t\t salad" | awk '{gsub(/[[:blank:]]+/,"\t");print}'
quelle
Eine Problemumgehung für die Registerkarte auf osx ist die Verwendung
"\ "
eines Escapezeichens gefolgt von vier Leerzeichen.Wenn Sie versuchen, die letzte Instanz eines Musters zu finden, z. B. a,
" })};"
und nach diesem Muster eine Datei in eine neue Zeile einfügen, sieht Ihrsed
Befehl in osx folgendermaßen aus:sed -i '' -e $'/^\ \})};.*$/ r fileWithTextIWantToInsert' FileIWantToChange
Das Markup macht es unklar: Dem Escape-Zeichen müssen vier Leerzeichen folgen, um
sed
Zeichen , um ein Tabulatorzeichen auf osx zu registrieren.Der gleiche Trick funktioniert, wenn dem Muster, das Sie suchen möchten, zwei Leerzeichen vorangestellt sind, und ich kann mir vorstellen, dass es auch funktioniert, um ein Muster zu finden, dem eine beliebige Anzahl von Leerzeichen vorangestellt ist.
quelle