用制表符替换每行开头的所有空格

use*_*009 2 sed

如何用制表符替换每行开头的所有空格?

我更愿意为此使用 sed。

Sté*_*las 8

便携。

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

一些炮弹(ksh93zshbashmksh和FreeBSDsh至少)也支持行情的一种特殊形式($'...')里的东西一样\t被扩展。

sed $'s/^  */\t/' < file.in > file.out
Run Code Online (Sandbox Code Playgroud)

fish外壳扩展引号以外的人:

sed 's/^  */'\t/ < file.in > file.out
Run Code Online (Sandbox Code Playgroud)

sed像 GNU 这样的一些实现 本身sed也识别\t出 TAB 的含义。因此,对于这些,这也将起作用:

sed 's/^  */\t/' < file.in > file.out
Run Code Online (Sandbox Code Playgroud)

可移植地,awk确实\t在其双引号内展开。并且还使用扩展的正则表达式,因此可以使用x+代替xx*

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