用相同的字符加上其他东西替换第一个字符?

时间:2014-05-09 23:11:39

标签: regex vim vi

如果你有一系列行(不是整个文件),以一些可变数量的空格开头,后跟一些字母字符:

   aaaa
   bbbb
   cccc
   DDDD

你想转换成这个:

   # aaaa
   # bbbb
   # cccc
   # DDDD

你将如何在Vi中做到这一点?

我正在思考以下几点:

s / [a-z,A-Z] /#(某事)/

但我不确定如何表达(某事)与发现匹配的内容。

感谢。

3 个答案:

答案 0 :(得分:2)

:g/^ *[a-zA-Z]/s/^/# /
  • g代码
  • /^ *[a-zA-Z]/空格+ alpha
  • s/^/# /#
  • 替换该行的开头

要直接回答您的问题,(something)应为&。显然,你的表达式会匹配第一个字母字符,无论它出现在哪一行,并在那里插入#

答案 1 :(得分:1)

修复您的sed命令(您可以为您的环境将[{1}}替换为[a-zA-Z])

\w

解释

  • sed 's/\(^ \w*\)/#\1/' file 表示\1中的上一个匹配项,如果有多对( ),请使用序列号( )\2

如果您需要在vi / vim中执行此操作,请运行:

\3

答案 2 :(得分:0)

在混音中再添加一个选项::%s/^\s\+/&# /

/^\s\+匹配行首的一个或多个空格,&将替换为匹配的字符串,然后将#添加到替换