用sed(或类似的)替换前导空格

Bee*_*ope 3 regex unix bash sed

我想用一些相同数量的其他字符替换文件每一行的前导空格或制表符(为简单起见,我们使用_).

例如

foo bar
 foo bar
  line 3
Run Code Online (Sandbox Code Playgroud)

foo bar
_foo bar
__line 3
Run Code Online (Sandbox Code Playgroud)

请注意,非领先的whitepsace不会受到影响,否则这将很容易!我怀疑它仍然很容易,但我错过了这个伎俩.

Sie*_*geX 7

这对你有用:

sed ':a;s/^\([[:space:]]*\)[[:space:]]/\1_/;ta' file
Run Code Online (Sandbox Code Playgroud)

$ sed ':a;s/^\([[:space:]]*\)[[:space:]]/\1_/;ta' <<<$'foo bar\n foo bar\n\t\tline 3\n _ x'
foo bar
_foo bar
__line 3
__ x
Run Code Online (Sandbox Code Playgroud)

  • 你不需要在正则表达式中排除前导下划线,你可以只查找空格:`{:a; s/^ \([[:space:]]*\)[[:space:]] /\1_ /; TA}` (2认同)