如何将N个空格的起始数替换为N + 2个空格的数量?

时间:2016-03-29 13:54:06

标签: regex sed

我用sed做这项工作。这是我的剧本:

sed 's/^(      )([^ ]+)$/\1  \2/g' -i main.js

它不起作用。这是错误信息:

sed: 1: "s/^(      )([^ ]+)$/\1  ...": \1 not defined in the RE

2 个答案:

答案 0 :(得分:1)

由于Basic sed使用BRE,您需要转义()+

sed 's/^\(      \)\([^ ]\+\)$/\1  \2/g' -i main.js

sed 's/^\([[:blank:]]\+\)/\1  /'  main.js

答案 1 :(得分:1)

您不需要捕获组。如果您想在替换中重复整个匹配,可以使用&

sed -i 's/^      /&  /' main.js

这会为以六个空格开头的任何行添加两个空格,无论它们跟随什么。请注意,g标志在这里没有意义,因为根据定义,此替换只能在每行发生一次。

如果您只想在以六个空格开头,后跟非空格的行中添加两个空格,则可以使用

sed -i '/^ \{6\}[^ ]/s/^ \{6\}/&  /' main.js

仍然比捕获和反向引用短一点。它使用一个地址(第一个/.../表达式),这意味着它后面的命令只对匹配地址的行执行;实际命令以s开头,是正常替换。