我用sed做这项工作。这是我的剧本:
sed 's/^( )([^ ]+)$/\1 \2/g' -i main.js
它不起作用。这是错误信息:
sed: 1: "s/^( )([^ ]+)$/\1 ...": \1 not defined in the RE
答案 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
开头,是正常替换。