Syb*_*ser 2 linux sed regular-expression
在 vim 中似乎可以这样做:
:s/^\t\+/\=repeat(' ',len(submatch(0)))
Run Code Online (Sandbox Code Playgroud)
我不知道这如何翻译成 sed 。我尝试了以下操作:
sed -ri "s/^\t\+/\=repeat(' ',len(submatch(0)))/g" test.txt
Run Code Online (Sandbox Code Playgroud)
该命令似乎没有效果。
这就是expand例如 的用途expand -t 4 file.txt。
expand不会编辑原始文件,但您可以重定向到新文件并mv覆盖原始文件,或者sponge如果您已安装它,则使用它,例如
expand -t 4 file.txt > file.new && mv file.new file.txt
or
expand -t 4 file.txt | sponge file.txt
Run Code Online (Sandbox Code Playgroud)
仅供参考,请参阅unexpand执行相反的操作,将多个空格转换为制表符。
和expand都unexpand支持使用固定宽度的选项卡(例如-t 4或-t 8等)或选项卡位置列表(例如-t 4,12,32)。他们还可以选择仅转换初始的、前导的空格/制表符。有关详细信息,请参阅手册页。
有关 的更多信息sponge,请参阅man sponge和是否有海绵的标准替代方案可以通过管道将文件传输到自身?。简而言之,它使用临时文件为您执行重定向和 mv。顺便说一句,永远不要尝试将标准输出重定向到当前用作标准输入的同一文件。shell 会在读取之前覆盖它。
sponge来自moreutils包。
PS:另请参阅GNU 缩进或许多其他类似的源代码重新格式化工具之一。