使用sed用空格替换制表符

man*_*uai 6 linux shell sed

我正在尝试使用sed替换4个空格的选项卡,但它不起作用.

这是我的代码:

sed -i '{s/\t/ \{4\}/g}' filename
Run Code Online (Sandbox Code Playgroud)

任何建议都表示赞赏.

anu*_*ava 10

sed更换不应该是一个正则表达式,所以使用:

sed -i.bak $'s/\t/    /g' filename
Run Code Online (Sandbox Code Playgroud)

在gnu-sed甚至这将工作:

sed -i.bak 's/\t/    /g' filename
Run Code Online (Sandbox Code Playgroud)


λus*_*ser 5

已经有一个可接受的答案,但它对基本选项卡扩展进行了硬编码,而选项卡具有适合对齐的可变宽度,这在前面的答案中没有考虑到。例如:

12\tabcd
1234\tabcd
Run Code Online (Sandbox Code Playgroud)

应该扩展到正确对齐:

12      abcd
1234    abcd
Run Code Online (Sandbox Code Playgroud)

但给定的 sed 命令将错误地扩展为这种未对齐的输出:

% printf "12\tabcd\n1234\tabcd\n" | sed 's/\t/        /g'
12        abcd
1234        abcd
Run Code Online (Sandbox Code Playgroud)

正确的方法是使用标准命令expand,它安装在所有系统上。

% printf "12\tabcd\n1234\tabcd\n" | expand     
12      abcd
1234    abcd
Run Code Online (Sandbox Code Playgroud)

如果您想使用大小为 4 的制表位,请传递-t 4