vim编辑器中字符创替换

此文为转贴:

方法有二:

(一)通过vi编辑器来替换。

参考博文:

http://www.linuxdiyf.com/viewarticle.php?id=99843

http://kingaragorn.javaeye.com/blog/467308

vi/vim 中可以使用 :s 命令来替换字符串。以前只会使用编辑软件进行替换,今天发现该命令有很多种写法(vi 真是强大啊,还有很多需要学习),记录几种在此,方便以后查询。

:s/well/good/ 替换当前行第一个 well 为 good

:s/well/good/g 替换当前行所有 well 为 good

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

:n,$s/well/good/g 替换第 n 行开始到最后一行中每一行所有 well 为 good

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

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

:%s/well/good/g(等同于 :g/well/s//good/g) 替换每一行中所有 well 为 good

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

:s#well/#good/# 替换当前行第一个 well/ 为 good/

:%s#/usr/bin#/bin#g

可以把文件中所有路径/usr/bin换成/bin

(二)Sumly法直接替换文件中的字符串。(此法不用打开文件即可替换字符串,而且可以批量替换多个文件。)

参考博文: http://easytech.javaeye.com/blog/316948

例1

执行命令:
perl -p -i -e "s/China/Sumly/g" /www/*.htm /www/*.txt

上面的意思是说将www文件夹下所有的htm和txt文件中的“China”都替换为“Sumly”

例2

执行命令:

perl -p -i -e "s/memory_production/memory_production2/g" ./*.sql

上面的意思是将当前目录下所有的sql文件中的“memory_production”替换成“memory_production2”

======================================
linux sed 批量替换多个文件中的字符串
http://www.svn8.com/linux/accidence/20100422/29910.html

linux下批量替换文件内容   1、网络上现成的资料

  格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径`

Svn中文网

  linux sed 批量替换多个文件中的字符串

  sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir`

  例如:替换/home下所有文件中的www.admin99.net为admin99.net Bbs.Svn8.Com

  sed -i "s/www.admin99.net/admin99.net/g" `grep www.admin99.net -rl /home`

Bbs.Svn8.Com

  exp:sed -i "s/shabi/$/g" `grep shabi -rl ./` Svn8.Com

  2、自己额外附加 Svn8.Com

  2.1 将文件1.txt内的文字“garden”替换成“mirGarden”

  # sed -i "s/garden/mirGarden/g" 1.txt //sed -i 很简单

  2.2 将当前目录下的所有文件内的“garden”替换成“mirGarden”

## sed -i "s/garden/mirGarden/g" `ls` //其实也就是ls出多个文件名而已

====================================
Linux下如何同时替换多个文件中的文本或字符串
http://hi.baidu.com/jiqing0925/blog/item/0e97ea196662ab4242a9ad14.html
====================================
作者:吉庆( [email protected] )
主页:http://hi.baidu.com/jiqing0925
转载请保留作者信息。
-------------------
做一件比较复杂的事通常存在多种方法。
一次性替换多个文件中的文本是我们常遇到的问题,下面是解决这个问题的三种方法:

1. vi 方法
参见vim用户手册26.

*26.3* 改动多个文件

假定你有个变量名为 "x_cnt" 而你要把他改为 "x_counter"。这个变量在多个 C 文件都被用到了。你需要在所有文件中作此改动。你得这么做。把所有相关文件放进参数列表:

:args *.c

这个命令会找到所有的 C 文件并编辑其中的第一个。现在你可以对所有这些文件执行置换命令:

:argdo %s/\<x_cnt\>/x_counter/ge | update

命令 ":argdo" 把另一个命令当作其参数。而后者将对参数列表内所有的文件执行。作为参数的替换命令 "%s" 作用于所有文本行。它用 "\<x_cnt\>" 来查找"x_cnt"。"\<" 和 "\>" 用来指定仅匹配那些完整的词,而不是 "px_cnt" 或"x_cnt2"。

替换命令的标记中包含 "g",用以置换同一行文本内出现的所有的匹配词 "x_cnt"。标记 "e" 用于避免因文件中找不到 "x_cnt" 而出现错误信息。否则 ":argdo" 命令就会在遇到第一个找不到 "x_cnt" 的文件时中断。字符 "|" 分隔两条命令。后面的 "update" 命令将那些有改动的文件存盘。如果没有 "x_cnt" 被改成 "x_counter",这个命令什么也不做。

还有一个 ":windo" 命令,用于在所有视窗内执行其参数所规定的命令。以及 ":bufdo"命令,对所有缓冲执行其参数所规定的命令。使用中要小心,因为你在缓冲列表中的文件数量可能超过你能想像的。请用 ":buffers" 命令 (或 ":ls") 来检查缓冲列表。

2. perl方法可以在命令行下进行替换,仍然以vi方法中的例子进行讲解,把c文件中的"x_cnt" 改为 "x_counter"。可以执行以下命令:find . -name ‘*.c‘ -print0 | xargs -0 perl -pi -e ‘s/x_cnt/x_counter/g‘

xargs 把find命令的结果作为perl的参数。find的参数-print0和xargs的参数-0是防止文件名中有空格或新行造成错误,可以man xargs获得帮助。

注意: 如果替换的字符包括 ()[]/"‘!? 等等这样的特殊字符,你必须在字符前加上反斜杠\ 。

这种方法的好处是不用启动编辑器,比较迅速。缺点是容易出现不想要的替换,例如:把px_cnt替换成了px_counter。

3. sed
仍以上面的例子讲解:
find . -name "*.c" -print0 | xargs -0 sed -i ‘s/x_cnt/x_counter/g‘
优缺点和perl方法相同。

以上方法的差异只在于使用工具的不同,相信肯定还有别的工具能办到这件事。
比如emacs,肯定也能做到这些,只是因为我不用emacs,所以不熟悉。
希望大家总结自己得心应手的方法。

==================
Linux sed批量替换多个字符串

http://www.itqun.net/content-detail/105074.html

比如,要将目录/modules下面所有文件中的zhangsan都修改成lisi,这样做:

sed -i "s/zhangsan/lisi/g" `grep zhangsan -rl /modules`

解释一下:

-i 表示inplace edit,就地修改文件
-r 表示搜索子目录
-l 表示输出匹配的文件名

这个命令组合很强大,要注意备份文件。

(1)sed ‘y/1234567890/abCDEFGHIJ/‘ test_sed

sed ‘y/1234567890/abCDEFGHIJ/‘ filename
abCDEFGHIJ
BCDEFGHIJA
CDEFGHIJAB
DEFGHIJABC
注意变换关系是按两个list的位置对应变换

其中:test_sed的内容是:

1234567890
2345678901
3456789012
4567890123

(2)替换每行所有匹配

sed ‘s/01/Ab/g‘ test_sed
1234567890
23456789Ab
3456789Ab2
456789Ab23
注意:第一行的0,1没有分别替换为A,b

删除:d命令

*

$ sed ‘2d‘ example-----删除example文件的第二行。
        *

$ sed ‘2,$d‘ example-----删除example文件的第二行到末尾所有行。
        *

$ sed ‘$d‘ example-----删除example文件的最后一行。
        *

$ sed ‘/test/‘d example-----删除example文件所有包含test的行。

替换:s命令

*

$ sed ‘s/test/mytest/g‘ example-----在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。
        *

$ sed -n ‘s/^test/mytest/p‘ example-----(-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就打印它。
        *

$ sed ‘s/^192.168.0.1/&localhost/‘ example-----&符号表示替换换字符串中被找到的部份。所有以192.168.0.1开头的行都会被替换成它自已加 localhost,变成192.168.0.1localhost。
        *

$ sed -n ‘s/\(love\)able/\1rs/p‘

时间: 2024-10-09 02:44:15

vim编辑器中字符创替换的相关文章

vi和vim编辑器中上下左右变成了ABCD

[问题] 一次在使用普通用户在redhat中使用vi和vim编辑器时,发现在vi和vim编辑器中:在命令行模式下能够正常使用上下左右键,但是在非命令行模式下不能正常使用上下左右方向键 [网上解决办法] 1)在/etc/vim/vimrc 中加入以下内容: set nocompatible  //支持方向键 set backspace=2   //支持backsapce前删键 2)在vi和vim的命令行模式下输入:set nocompatible [最后没办法的办法(不是最好)] 由于当前是普通用

C#判断字符串是否存在字母及字符串中字符的替换实例

本文实例讲述了C#判断字符串是否存在字母及字符串中字符的替换的方法.分享给大家供大家参考.具体实现方法如下: 首先要添加对命名空间"using System.Text.RegularExpressions;"的引用 下面以一个字符串为例: 代码如下: string ss = "aaZ31 dd2f3"; string sss = ss.Replace(" ", "");//将字符串ss中的空格去掉 string sss2 =

如何在CAD编辑器中查找和替换文字?

如何在CAD编辑器中查找和替换文字?在编辑CAD图纸的时候,如果全部是用手去绘制的话非常的浪费时间,所以就需要借助一些CAD编辑器来绘制CAD图纸,但是在绘制的过程中一张CAD图纸是由许多部分组成的,为了查找方便需要在CAD图纸中标注一些文字,如果发现标注错误的话,那要怎么办呢?如何在CAD编辑器中查找和替换文字?具体要怎么来操作?下面就来教教大家,想要了解的朋友就一起来看看吧! 使用步骤一:首先还是需要在日常使用的电脑中任意的打开一个浏览器,在浏览器的搜索框中搜索迅捷CAD编辑器专业版,进入官

excel文件中*字符如何替换

excel文件中*字符如何替换? (1)分析:在excel中,*表示多个字符的通配符,所以无法直接用*去查找替换. (2)输入~*~,则可以进行查找和替换. 原文地址:https://www.cnblogs.com/apromise/p/10847020.html

shell 脚本中常用字符含义与vim编辑器中的快捷键

1.vim编辑器的命令模式中常用的快捷键 命令 作用 dd 删除(剪切)光标所在整行. 5dd 删除(剪切)从光标处开始的5行. yy 复制光标所在整行. 5yy 复制从光标处开始的5行. p 将之前删除(dd)或复制(yy)过的数据粘贴到光标后. /字符串 在文本中从上至下搜索该字符串. ?字符串 在文本中从下至上搜索该字符串. n 显示搜索命令定位到的下一个字符串. N 显示搜索命令定位到的上一个字符串. u 撤销上一步的操作 2.vim编辑器的末行模式中的常用命令 命令 作用 :w 保存

Linux的vim编辑器中的翻页命令

当我们进入Linux的vim编辑器查看脚本时,按上下键查看是不是非常慢?这个时候就要用到我们的翻页快捷键了,快捷键命令如: 整页翻页命令为:    Ctrl + f 键   f 的英文全拼为:forward: Ctrl + b 键  b 的英文全拼为:backWord: 翻半页命令为:      Ctrl + d 键  d 的英文全拼为:down: Ctrl + u 键  u 的英文全拼为:up: 直接查看该脚本的最后一行:输入:$,然后回车: 在键盘按下大写G : 在键盘按Shift + g:

vim编辑器中替换字符串

vi/vim 中可以使用 :s 命令来替换字符串.以前只会使用一种格式来全文替换,今天发现该命令有很多种写法(vi 真是强大啊,还有很多需要学习),记录几种在此,方便以后查询. 替换 :s/vivian/sky/ 替换当前行第一个 vivian 为 sky :s/vivian/sky/g 替换当前行所有 vivian 为 sky :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky :n,$s/vivian/sky/g 替换第 n 行开始到最

20_Shell语言———VIM编辑器基础知识三之窗口属性定制、配置文件及查找替换功能

Vim编辑器可以让用户按照需求来定制一些使用属性. 一.窗口属性定义 1)显示行号 行号不是内容,只是用来帮助用户确认文本所在的行.在vim编辑器中,如果要显示行号,可以在末行模式下输入: set number 如果想关闭,则可以在功能名称前面加上no,即: set nonumber 命令可以被简写,如set number 可以简写为 set nu:set nonumber 可以简写为 set nonu. 注意,上述设定仅对当前vim的进程有效,一旦当前进程关闭,这些设定就会失效,如果要使设定永

学习vi和vim编辑器(8):全局替换(1)

本章学习vi编辑器中的全局替换命令.通过全局替换命令,可以自动替换文件中所有出现过的某个单词.全局替换一般会用到两个ex命令:":g"(global),":s"(substitute). 替换命令: 替换命令的语法如下: " :s/old/new/ ",该命令会将当前这一行中第一个出现的old模式替换为new.其中斜线用来分隔命令的各部分(如果斜线位于该命令的最后一个字符,则该斜线可以省略). " :s/old/new/g "