Заменить все пробелы в начале каждой строки на табуляцию

Заменить все пробелы в начале каждой строки на табуляцию

Как заменить все пробелы в начале каждой строки на табуляцию?

Я бы предпочел использовать для этого 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.

Связанный контент