----替换----
- 文件内全部替换:
:%s#abc#123#g (如文件内有#,可用/替换,:%s/abc/123/g)
–注:把abc替换成123
(或者: %s/str1/str2/g 用str2替换文件中所有的str1)
- 文件内局部替换:
:20,30s#abc#123(如文件内有#,可用/替换,:%s/abc/123/g)
–注:把20行到30行内abc替换成123
-------跳转、删除--------
在命令模式输入 shit+g #跳至末位
gg #首位
:10 # 转到10行
:1,.d # 删除首行至当前行的内容
:set number #设置显示行号
关于删除的一些说明:
在 vi 中,“ . ” 表示当前行,“ 1,. ” 表示从第一行到当前行, “ d ” 表示删除。
如果只是想删除某一行,那么把光标指到该行,然后输入 dd 即可
过滤出关键字附近的日志
—按行号查看
因为通常时候我们用grep拿到的日志很少,我们需要查看附近的日志, cat -n test.log |grep “地形” ,得到"地形"关键字所在的行号是102行. 此时如果我想查看这个关键字前10行和后10行的日志:
cat -n test.log |tail -n +92|head -n 20
tail -n +92 #表示查询92行之后的日志
head -n 20 #则表示在前面的查询结果里再查前20条记录
按日期查看:
通常我们非常需要查找指定时间端的日志
sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log
特别说明:上面的两个日期必须是日志中打印出来的日志,否则无效.
关于日期打印,可以先 grep ‘2014-12-17 16:17:20’ test.log 来确定日志中是否有该时间点,以确保第4步可以拿到日志
如果我们查找的日志很多,打印在屏幕上不方便查看, 有两个方法:
(1)使用more和less命令, 如: cat -n test.log |grep “地形” |more 这样就分页打印了,通过点击空格键翻页
(2)使用 >xxx.txt 将其保存到文件中,到时可以拉下这个文件分析.如:
cat -n test.log |grep “地形” >xxx.txt
一、在某行(指具体行号)前或后加一行内容
#第4行末尾追加一行,内容为test
sed -i ‘N;4atest’ test.txt
#第4行行首追加一行,内容为test
sed -i ‘N;4itest’ test.txt
#匹配到test字段的行行首插入一行
find . -name test.txt|xargs sed -i '/test/i
#所有行首增加
sed -i ‘s/^/ABC/’ test.txt
#所有行尾添加
sed -i ‘s/$/XYZ/’ test.txt
#第5行添加文件a.txt的内容
sed -i ‘5 r a.txt’ test.txt
#oooo行文件a.txt的内容
sed -i ‘/oooo/r a.txt’ 5.txt
二、删除操作
#删除指定行,例如第5行
sed -i ‘5 d’ test.txt
#删除首行
sed -i ‘1d’ test.txt
#删除末行
sed -i ‘$d’ test.txt
#删除空行
sed -i ‘/^$/d’ test.txt
#剔除空格
sed -i ‘s/[ ]*//g’ test.txt
#删除车符
sed -i ‘s/^M//g’ test.txt
#删除指定字段的下一行
sed -i ‘/test/{n;d}’ test.txt #匹配到test字段
#删除指定字段的上一行
sed -i -e :a -e ‘$!N;s/.*n(.*test)/1/;ta’ -e ‘P;d’ test.txt #匹配到test字段
三、其他操作
#将所有的行合并成一行,并用指定字符分割
sed ‘:a;N;$!ba;s/\n/,/g’ test.txt
四、处理以下文件内容的命令
awk ‘/^ +/{p++}/?/{t=s=0;v++;k[v]=p;p=0;next}!t&&!/[0-9]/{s++;a[s]=a[s]?a[s]"\t"$0:$0;}/1+/{m[++q]=$0;if($0>n) n=$0}
END{for(i=1;i<=n;i++) {print a[i];if(i<=v) {t=t?t"\t"m[i]:m[i];d=d?d"\t?":"\n?"}}print t,d}’ 文件名
grep -i -nu “heap memory” info.log
查找“heap memory”位置 和具体内容
0-9 ↩︎