Ersetzen Sie alle Leerzeichen am Anfang jeder Zeile durch einen Tabulator.

Ersetzen Sie alle Leerzeichen am Anfang jeder Zeile durch einen Tabulator.

Wie kann ich alle Leerzeichen am Anfang jeder Zeile durch einen Tabulator ersetzen?

Ich würde hierfür lieber sed verwenden.

Antwort1

Tragbar.

TAB=$(printf '\t')
sed "s/^  */$TAB/" < file.in > file.out

Einige Shells ( ksh93, zsh, bash, und zumindest mkshFreeBSD ) unterstützen auch eine spezielle Form von Anführungszeichen ( ), bei der Dinge wie erweitert werden.sh$'...'\t

sed $'s/^  */\t/' < file.in > file.out

Die fishShell erweitert diejenigen außerhalb der Anführungszeichen:

sed 's/^  */'\t/ < file.in > file.out

Einige sedImplementierungen wie GNU sederkennen auch \t TAB als selbständige Bedeutung. Bei diesen würde also auch dies funktionieren:

sed 's/^  */\t/' < file.in > file.out

Portabel ist, dass innerhalb der Anführungszeichen awkerweitert wird . Außerdem werden erweiterte reguläre Ausdrücke verwendet, sodass man anstelle von verwenden kann :\tx+xx*

awk '{sub(/^ +/, "\t"); print}' < file.in > file.out

Antwort2

Wenn Sie GNU/Linux verwenden, können Sie sed -rerweiterte reguläre Ausdrücke aktivieren:

 echo "        lots of spaces    " | sed -r 's:^\s+:\t:'

wobei nur die führenden Leerzeichen alle durch ein einzelnes ersetzt werden tab.

verwandte Informationen