分类: LINUX
2013-05-10 16:37:29
递归替换某目录下所有文件(含子目录)中字串“AAA”为“BBB”,全字符匹配,区分大小写:
find /test/ -type f -exec sed -i 's/\bAAA\b/BBB/g' {} +
PS:不区分大小写是把g改成i: find /test/ -type f -exec sed -i 's/\bAAA\b/BBB/i' {} +
\b...\b代表全字符匹配,去掉2个\b,则就不是全字符匹配
把AAA,CCC,DDD都替换为BBB(全字符匹配,区分大小写):
find /test/ -type f -exec sed -ri 's/\bAAA|CCC|DDD\b/BBB/g' {} +
一次替换多个字串:
has_macro="AAA"
has_macro="$has_macro|DDD"
has_macro="$has_macro|CCC"
find test/ -type f -exec sed -ri "s/\b$has_macro\b/BBB/g" {} +
sed -ri 's/(region=)[^&]+/\1us/' [filepath] //讲file该行中...?ion=ca&...的值改为us
cat DFT_CFG_FILE | sed 's/.*region=\([^&]\+\).*/\1/' //获取...?ion=ca&...中的ca
sed -i '/XXX/d' [file] // 用sed 删除file中包含XXX的所有行
sed -i '3,8d' [file] //删除file中第3到8行的内容
sed -i "s/xxx/yyy/g" [file] //用sed把文件中xxx替换为yyy
g/xxx/d,删除包含xxx的行
v/xxx/d,删除不含xxx的行
sed -i 's/\(.*=\).*/\1/' filename //删除filename文件中每行=号后面的所有字符串
:%s/xxx//gn,统计xxx个数,n表示只报告匹配的个数而不进行实际的替换。
:1,%s/要被替换的字串/替换为的子串/g
命令:%s/\s\+$//g
可以删除行尾多余的空格和tab符号。
命令:%s/ *$//g
/和*中间有空格,只能删除行尾空格,对于tab不能删除
删除每行最后2个字符:第2个 $前有几个“.”就代表要删除几个字符。
:1,$s/..$//
删除每行最前2个字符:^后有几个“.”就代表要删除几个字符。
:%s/^..//
:% s/^.\{4\}//g
将当前缓冲区的所有行的前4个字符删除
按键操作: 注释:ctrl+v 进入列编辑模式,向下或向上移动光标,把需要注释的行的开头标记起来,然后按大写的I,再插入注释符,比如"#",再按Esc,就会全部注释了。
删除:先按v,进入visual模式,横向选中列的个数(如"#"注释符号,需要选中两列),再按Esc,再按ctrl+v 进入列编辑模式,向下或向上移动光标,选中注释部分,然后按d, 就会删除注释符号(#)。
PS:当然不一定是shell的注释符"#",也可以是"//",或者其他任意的字符;vim才不知道什么是注释符呢,都是字符而已。 使用替换命令: :% s/^/\/\//g 在全部内容的行首添加//号注释
:2,50 s/^/\/\//g 在2~50行首添加//号注释
:2,50 s/^\/\///g 在2~50行首删除//号
每行的行首都添加一个字符串:%s/^/要插入的字符串
每行的行尾都添加一个字符串:%s/$/要插入的字符串
解释:
% 代表针对被编辑文件的每一行进行后续操作 $ 代表一行的结尾处 ^ 代表一行的开头处
统计次数
在所有行中查找 字符串 出现的次数:
:%s/字符串/&/gn
在m和n行之间查找 字符串 出现的次数
:m,ns/字符串/&/gn