批量替换,多行删除,复制,移动

来源:互联网 发布:帮客创投网络借贷 编辑:程序博客网 时间:2024/05/01 09:52

批量搜索目录下所有文件中内容


     find * | xargs grep "tihuan"

 

 

:n1,n2 m n3    移动n1-n2行(包括n1,n2)到n3行之下;

:n1,n2 co n3    复制n1-n2行(包括n1,n2)到n3行之下;

:n1,n2 d           删除n1-n2行(包括n1,n2)行;

vi替换使用规则:
:g/s1/s/s2/s3/g
第一个g表示对每一个包括s1的行都进行替换,第二个g表示对每一行包括s1的行所有的s2都用s3替换
s表示替换,s2是要被替换的字符串,他可以和s1相同(如果相同的话用//代替),s3是替换字符串
在vi界面下使用命令 :%s#/usr/bin#/bin#g 可以把文件中所有路径/usr/bin换成/bin。其中“#”是转义字符,表明其后的“/”字符是具有实际意义的字符,不是分隔符。


s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1
:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1
:s/str1/str2/gi 用字符串 str2 替换行中所有出现的字符串 str1,在查找时不区分大小写


: .,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1
:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1
:g/str1/s//str2/g 功能同上
:%s/str1/str2/g 功能同上
:g/foobar/s/bar/baz/g 首先搜寻foobar,然后把它变成foobaz. 它没有改变 jailbars, 而其他的一些命令可能会改变jailbars.
:%s/str1/str2/gc 替换全文所有符合的单词并让用户确认
:g/str1/s//str2/gi 用字符串 str2 替换正文中所有出现的字符串 str1,在查找时不区分大小写,此命令没有下面的严格,经测试显示,不能完全做到在查找时忽略大小写
:%s/str1/str2/gi 用字符串 str2 替换正文中所有出现的字符串 str1,在查找时不区分大小写,在查找时可以完全做到忽略大小写
:10,20s/^/ / 将第10行至第20行资料的最前面插入5个空白
:%s/$/str/g 在整个文件每一行的行尾添加“str”
:3,7s/str1/str2/g仅替换文件中的第3行到第7行中的“str1”成“str2”
:%s/:.*//g删除/etc/passwd中用户名后面的从冒号开始直到行尾的所有部分(前提是已经打开了/etc/passwd文件)从上述替换命令可以看到:g放在命令末尾,表示对搜索字符串在光标所在行的每次出现进行替换;不加 g,表示只对搜索字符串的首次出现进行替换;g放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。上面的命令中的/只是起分隔作用,也可以用其他的字符代替。另外,可以在正规式里用/(和/)来剥离一个序列。例如:

有些字符域使用得很频繁. Vim 为这些字符域提供了预定义域:
项 匹配 相当于
/d 数字 [0-9]
/D 非数字 [^0-9]
/x 十六进制数字 [0-9a-fA-F]
/X 非十六进制数字 [^0-9a-fA-F]
/s 空白字符 [ ] ( 和 )
/S 非空白字符 [^ ] (非 和 )
/l 小写字母 [a-z]
/L 非小写字母 [^a-z]
/u 大写字母 [A-Z]
/U 非大写字母 [^A-Z]
& 所有查找时匹配到的东西
/[Ee] 更改大小写的选择区域的终点

:%s//s/+$// 删除行尾多余的空格
命令前面指明范围是“%”,所以这会作用于整个文件。“substitute”命令的样式是“/s/+$”。这表示行末($)一个或者多个(/+)空格(/s)。:g//(foo/)/(bar/)/s//2//1baz/g 将foobar替换成foobaz