
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 mksh
FreeBSD ) 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 fish
Shell erweitert diejenigen außerhalb der Anführungszeichen:
sed 's/^ */'\t/ < file.in > file.out
Einige sed
Implementierungen wie GNU sed
erkennen 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 awk
erweitert wird . Außerdem werden erweiterte reguläre Ausdrücke verwendet, sodass man anstelle von verwenden kann :\t
x+
xx*
awk '{sub(/^ +/, "\t"); print}' < file.in > file.out
Antwort2
Wenn Sie GNU/Linux verwenden, können Sie sed -r
erweiterte 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.