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
Antworten:
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'
OSX sed versteht nur überhaupt nicht \tdas Muster, nicht das Ersetzen\t, da es sich im Wesentlichen um das alte 4.2BSD handelt, seddas von 1982 oder später übrig geblieben ist. Verwenden Sie eine wörtliche Registerkarte (die in bashund vimist Ctrl+ V, Tab) oder GNU installieren coreutilseine angemessenere zu bekommen sed.
"Anführungszeichen hat die Shell den Backslash verarbeitet und sedwird ihn nicht sehen. Bei sedund 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.
sedVerwendung 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"
Ctrl+V Tabda Sie den gesamten Befehl kopieren, einfügen und einfacher freigeben können, ohne das Steuerzeichen zu verlieren.
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 Ihr sedBefehl 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.