vim 查找替换 和高级应用 vim的多行注释和替换

vi/vim 中可使用 :s 命令来替换字符串html

:s/vivian/sky/ 替换当前行第一个 vivian 为 skylinux

:s/vivian/sky/g 替换当前行全部 vivian 为 skyshell

:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 skyvim

:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行全部 vivian 为 skywindows

n 为数字,若 n 为 .,表示从当前行开始到最后一行ide

:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky工具

:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中全部 vivian 为 skypost

可使用 # 做为分隔符,此时中间出现的 / 不会做为分隔符ui

:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/spa

:%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/

1.

:s/vivian/sky/ 替换当前行第一个 vivian 为 sky

:s/vivian/sky/g 替换当前行全部 vivian 为 sky

2.

:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky

:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行全部 vivian 为 sky

(n 为数字,若 n 为 .,表示从当前行开始到最后一行)

3.

:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky

:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中全部 vivian 为 sky

4.

可使用 # 做为分隔符,此时中间出现的 / 不会做为分隔符

:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/

5.

删除文本中的^M

问题描述:对于换行,window下用回车换行(0A0D)来表示,Linux下是回车(0A)来表示。这样,将window上的文件拷到Unix上用时,总会有个^M.请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。

· 使用命令:cat filename1 | tr -d “^V^M” > newfile;

· 使用命令:sed -e “s/^V^M//” filename > outputfilename。须要注意的是在一、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必需要手工进行输入,而不是粘贴。

· 在vi中处理:首先使用vi打开文件,而后按ESC键,接着输入命令:%s/^V^M//。

· :%s/^M$//g

若是上述方法无用,则正确的解决办法是:

· tr -d "\r" < src >dest

· tr -d "\015" dest

· strings A>B

6.

其它

利用 :s 命令能够实现字符串的替换。具体的用法包括:

:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1

:s/str1/str2/g 用字符串 str2 替换行中全部出现的字符串 str1

:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾全部出现的字符串 str1

:1,$ s/str1/str2/g 用字符串 str2 替换正文中全部出现的字符串 str1

:g/str1/s//str2/g 功能同上

从上述替换命令能够看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索

字符串的首次出现进行替换;g 放在命令开头,表示对正文中全部包含搜索字符串的行进行替换操做。

所有替换:

:%s/old-string/new-string/g

vi是unix和linux系统上最强大和最广泛的文本编辑工具,通常而言,对于初次接触vi的朋友,每每对它的字符替换不是很熟悉,下面作一个简单的介绍:

对于字符替换,应该解决这样几个问题:

  • 用谁替换谁的问题;
  • 在那个范围内进行查找和替换;
  • 是替换查找到的第一个仍是全部匹配的项所有替换;

vi命令的各类选项就提供了这样的选择按住esc键,进入命令状态,而后按:,进入命令模式,开始输入查找和替换命令, 通常形式以下:

  • ranges/source/target/g 解释:range表示要搜索的范围
  • "s"这个字母表示搜索的意思,这个是不能缺乏的.
  • source表示要搜索的字串.
  • target表示要进行替换的字串.
  • g表示对于符合条件的字串所有进行替换.

其中range的取值以下:

  • %表示所有的行;
  • .表示当前行;
  • $表示最后一行;
  • 能够用具体的数字表示具体的行,如10,20等;

上述的标志能够进行组合:

如:

  • .,$s/source/target/g  表示从当前行到最后一行的搜索替换;
  • 又如10,20s/
  • 10,$s/等等组合;

 

vim的多行注释和替换

之前学vim时是用的vim tutor,记得那里面好像有关于多行注释的教程,不过刚才要用时发现本身之前学得一点都不扎实,除了最经常使用的一些命令外,其余命令一律不记得,看来好记性确实不赶烂笔头,仍是得记下来啊。。。

ctrl+v 进入列模式,向下或向上移动光标,把须要注释的行的开头标记起来,而后按大写的I,再插入注释符,好比#,再按Esc,就会所有注释。或者也能够运行下面这些命令:

:s/^/#                  #用"#"注释当前行
:2,50s/^/#              #在2~50行首添加"#"注释
:.,+3s/^/#              #用"#"注释当前行和当前行后面的三行
:%s/^/#                 #用"#"注释全部行

BTW:在替换时要注意,某些字符是须要转译的,如空格、括号等。

VIM是被誉为很是高效的文本编辑软件。可是掌握并高效的使用是件有难度的事情。在VIM中进行快速的查找和替换是提升VIM使用效率的重要方法。下面是我在阅读VIM用户手册时整理的一些资料:

  1. 行内搜索。
    1. f命令能够进行行内搜索。输入fx能够找到下一个x字符。
    2. F命令能够在反方向进行行内搜索,输入Fx能够找到上一个x字符。
    3. t命令一样是进行行内搜索,可是光标停留在符合条件的字符的前面。输入tx使光标停留在下一个x字符的前面。
    4. T命令能够在反方向进行行内搜索,可是光标停留在符合条件的字符的下一个字符上。输入tx使光标停留在上一个x的后面的字符上。
    5. %能够搜索与之匹配的对应的()[]{}。这个功能对于书写程序特别有用。
  2. 全文的搜索。键入/后,光标进入VIM底部的命令行,这时就能够输入以/为开始的/搜索命令了。
    1. 最简单的查找。输入/string就能够查找string字符串。
    2. 继续查找。在第一次搜索后输入n将会继续进行上一次搜索,若是输入3n那么会找到后面第三个符合的字符串。大写的N会在反方向,也就是向上进行搜索。
    3. 向上搜索。输入?能够向上搜索。随后的n命令将会继续向上搜索,N向下搜索,其余和/同样。
    4. 对大小写的匹配。
      1. 在命令行输入:set ignorecase能够设置搜索以忽略大小写的方式进行。输入:set noignorecase能够设置搜索以匹配大小写的方式进行。默认的,将匹配大小写。这个默认设置能够在.vimrc中修改。(方式1 指令设定:
        :set ic(ignorecase 的缩写) 忽略大小写
        :set noic(noignorecase 的缩写) 不忽略大小写
        输入了上述指令, 当每次的查找操做都会受到当前设定的影响)
      2. 大小写智能匹配模式。输入命令:set ignorecase smartcase能够设置为智能大小写匹配模式。在这种模式下,若是你输入的字符串中至少包含一个大写字母,那么就会以大小写敏感模式进行搜索,不然以忽略大小写模式进行搜索。
      3. 在搜索命令中指定大小写。在几种大小写搜索模式中进行转换总要输入长长的一串指令,若是须要不断地转换模式,确实有些麻烦。因此你能够直接在搜索命令中指定大小写匹配模式。\c表示忽略大小写,而\C表示对大小写敏感。 例如:a: /\CWord 区分大小写的查找     b:  /\cword 不区分大小写的查找
    5. 查找当前词。一个简单的方法可让你查找下一个和当前词同样的词,你不比输入/currentword,你能够直接按下*就能够查找下一个currentword。#可让你向上查找同一个单词。
    6. 调整查找后的光标位置。
      1. 使用/string/3会使在光标转到找到string字符串的行下面的第3行。第1行从包含string的行算起。一样可使用/string/-2来使光标停留在包含string的行的前面2行。
      2. 使 用/string/e可使光标停留在string字符串的末尾而不是默认的第一个字符位置。/string/b则表示停留在string第一个字符的位 置,不过默认就是如此,咱们不比画蛇添足。可是/string/b+2却可使光标停留在string字符串的第二个字符的位置,这里是r。在e或者b的 后面+或者-数字,能够进一步调整光标的位置。
    7. 特殊字符。在搜索命令中,  .*[]^%/?~$这10个字符有着特殊意义,因此在使用这些字符的时候要在前面加上一个反斜杠/。而\e表示<esc>;\t表示<tab>;\r表示<cr>;\b表示<bs>。
    8. 匹 配换行或空格。使用\n能够表示一个换行;而\s表示匹配空白,注意是空白不是空格。\_s表示匹配换行或者空格;\_a表示匹配换行或者一个字母。比 如:/the\nword查找以the结束而且下一行以word开始的行的位置。/the\_sword查找the和word之间以空白或者换行分割的位 置。/the\_s\+word表示the和word之间能够有多个空白。\+的含义能够在后面找到。
    9. 限定词首或者词尾。\<能够限定找到是以指定字符串开始的单词。好比/\<the能够找到以the开始在字符串,可是会忽略在单词中间包含the的字符串。而\>则是限定必须是以指定字符串结尾的单词。
    10. 行首和行尾。输入/^string查找以string开始的行,而且光标停留在这个string的第一个字符。输入/string$则查找以string结束的行,并将光标停留在这个string的第一个字符。这个模式不会忽略前导或者后置的空格。
    11. 匹配任何一个字符。句号.能够匹配任何一个字符。例如/t.e能够找到the或者tae或者tue。
  3. 更加复杂的匹配模式。实际上,/搜索可使用很是复杂的匹配模式。下面列出了其中一些复杂的匹配模式。
    1. 可重复的字符。
      1. 使用*表示它前面的字符能够重复屡次或者0次。好比/be*能够匹配b,be,bee,beee等等。可是这也会包含b,由于e重复0后是空。若是要匹配诸如be,bebe,bebebe的字符串可使用\(和\)把他们包括起来,形如:/\(be\)*。
      2. 使用\+来限定为重复至少一次到无数次。如:/be\+能够匹配be,bee,bee等等。
      3. 重复0次或者一次。\=能够指定重复0次或者一次。/strings\=表示匹配string或者strings。这在查找单词的复数形式特别有用.
      4. 指定重复的次数。\{n,m}能够指定重复n到m次。好比:/be\{2,4}将会匹配bee,beee,beeee。一样可使用\{,4}表示匹配0到4次;\{4,}表示4次到无数次;\{4}表示重复4次。
    2. 匹配列表中的一个。使用一个以\|分割的列表,能够表示匹配列表中任何一项。好比/one\|two表示查找one或者two;/one\|two\|three表示查找one或者two或者three。
      1. 一个复杂的实例:/end\(if\|while\|for\)将会查找endif,endwhile以及endfor。
      2. 字符列表。使用[0-9]能够表示一个0到9范围的字符。好比/string[1-5]表示查找string1,string2,string3,string4,string5。固然也可使用[a-z]表示字符a到z中间的一个。
      3. 特 殊的字符集合。使用\d也能够表示0到9的数字,这个选项能够代替[0-9]。\D表示非数字代替[^0-9];\x表示十六进制数代替[0-9a- fA-F];\X表示非十六进制数代替[^0-9a-fA-F];\s表示空白字符代替[ ] (<Tab> 和<Space>);\S表示非空白字符代替[^ ] (除<Tab> 和<Space>以外);\l表示小写字母代替[a-z];\L表示非小写字母代替[^a-z];\u表示大写字母代替[A-Z];\U表示 非大写字母代替[^A-Z]
  4. 搜 索并替换。输入:[range]s/from/to/[flags]命令能够搜索匹配的字符串而且替换为指定的字符串。这是一个稍微复杂的命令。其中 [range]是一个可选项,用来指定搜索替换的范围。[flags]也是一个可选项,用来指定搜索替换的处理方式。因此这个命令的简单形式 是:s/from/to/。
    1. 搜索替换的范围。若是没有指定范围,则只在当前行进行搜索替换。
      1. 在全部行进行搜索替换。范围符号%表示在全部行进行搜索替换。:%s/from/to/就是在全文查找from并替换为to。
      2. 在指定的行上进行搜索替换。:1,50s/from/to/表示在第1行和第50行之间(包括1和50行)进行搜索和替换。:45s/from/to/表示仅仅在第45行进行搜索和替换。而"1,$"行号范围和“%“是等价的。
    2. 处理方式。我如今使用的VIM默认的方式是无须确认。不过好像不一样版本的默认的处理方式是不一样的。
      1. 无须确认。方式符号g表示直接替换无须进行确认。:%s/from/to/g表示在全文中查找from而且直接所有替换为to。
      2. 列印。处理方式符号p表示在替换时列出每一个被改变的行。手册中这么说,可是实际效果却让我很迷惑。
      3. 确 认后处理。处理方式符号c表示在进行替换前须要用户进行确认。这时你能够选择(y/n/a/q/1/^E/^Y):y表示赞成当前替换;n表示不一样意当前 替换;a表示替换当前和后面的而且再也不确认;q表示当即结束替换操做;1表示把当前的替换后结束替换操做;^E向上滚屏^Y向下滚屏,用来帮助查看先后内 容以决定进行操做。
 
 
 
参考:http://blog.chinaunix.net/uid-23933445-id-99691.html
相关文章
相关标签/搜索