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 \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 in bash
und vim
ist Ctrl
+ V
, Tab
) oder GNU installieren coreutils
eine angemessenere zu bekommen sed
.
"
Anführungszeichen hat die Shell den Backslash verarbeitet und sed
wird ihn nicht sehen. Bei sed
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"
Ctrl+V Tab
da 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 sed
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.