
Как заменить все пробелы в начале каждой строки на табуляцию?
Я бы предпочел использовать для этого sed.
решение1
Портативно.
TAB=$(printf '\t')
sed "s/^ */$TAB/" < file.in > file.out
Некоторые оболочки ( ksh93
, zsh
, bash
, mksh
и по крайней мере FreeBSD sh
) также поддерживают специальную форму кавычек ( $'...'
), в которой \t
раскрываются такие вещи, как:
sed $'s/^ */\t/' < file.in > file.out
Оболочка fish
расширяет те, что находятся за кавычками:
sed 's/^ */'\t/ < file.in > file.out
Некоторые sed
реализации, такие как GNU, sed
также распознают \t
как значение TAB сами по себе. Так что с ними это также будет работать:
sed 's/^ */\t/' < file.in > file.out
Переносимо, awk
расширяется \t
внутри своих двойных кавычек. А также использует расширенные регулярные выражения, поэтому можно использовать x+
вместо xx*
:
awk '{sub(/^ +/, "\t"); print}' < file.in > file.out
решение2
Если вы используете GNU/Linux, то можно sed -r
включить расширенные регулярные выражения:
echo " lots of spaces " | sed -r 's:^\s+:\t:'
где только начальные пробелы заменяются одним tab.