2008年10月23日星期四

vi命令的查找和替换

vi是unix和linux系统上最强大和最普遍的文本编辑工具,一般而言,对于初次接触vi的朋友,往往对它的字符替换不是很熟悉,下面做一个简单的介绍.

对于字符替换,应该解决这样几个问题:
1.用谁替换谁的问题;
2.在那个范围内进行查找和替换;
3.是替换查找到的第一个还是所有匹配的项全部替换;

vi命令的各种选项就提供了这样的选择
按住esc键,进入命令状态,然后按:,进入命令模式,开始输入查找和替换命令,

一般形式如下:
ranges/source/target/g
解释:range表示要搜索的范围 "s"这个字母表示搜索的意思,这个是不能缺少的;
source表示要搜索的字串,
target表示要进行替换的字串,
g表示对于符合条件的字串全部进行替换;
其中ranges的去值如下:
1) %表示全部的行;
2) .表示当前行;
3) $表示最后一行;
4) 可以用具体的数字表示具体的行,如10,20等;

使用方法举例:
1、在vi中使用的查找替换方法
利用 :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 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。

2、在shell中使用find结合grep进行文件的替换

# find ./ -exec grep str1 ‘{}’ \; -exec sed -i.bak s/str1/str2/g ‘{}’ \;
# find ./ -exec grep str1 ‘{}’ \; -exec sed -i.bak s/str1/str2/g ‘{}’ \;
# find ./ -exec grep str1 ‘{}’ \; -exec sed -i.bak s/str1/str2/g ‘{}’ \;
# find ./ -exec grep str1 ‘{}’ \; -exec sed -i.bak s/str1/str2/g ‘{}’ \;
# find ./ -exec grep str1 ‘{}’ \; -exec sed -i.bak s/str1/str2/g ‘{}’ \;

上面命令可以在当前目录下(包括子目录)查找包含str1的文件,自动替换成str2,并且生成源文件的bak文件


好了,到这里,我想以前对vi命令有些了解的朋友已经可以很好的掌握vi的替换命令了。
zcat dv.21cn002_log.20071015.gz |grep dates=071015|grep 2007:23 |wc -l
要把上述dates=071015 全部替换成user=danahby
在VI下输入:%s/dates=071015 /user=danahby /g

没有评论:

博客归档