linux文件操作命令介绍
1)grep
grep 用于在文件中查找符合条件的记录
grep 参数 过滤条件 文件
过滤的条件中可使用正则表达式
-c 显示符合的行数
-i 忽略大小写
-n 显示符合要求的记录,包含行号
-v 显示不符合要求的记录
-A n 显示符合要求的记录,及下面的n行
-B n 显示符合要求的记录,及上面的n行
-C n 显示符合要求的记录,及上面和下面各n行
-E 显示符合多个条件的记录
--color 高亮显示关键字
多个条件选择过滤,使用 -E参数
多个并且条件过滤,使用多个grep 、管道符|
例如:grep -n 'perl' yum.log-20160823
grep -E 'perl|sql' yum.log-20160823
2)sed
sed 用于查询符合条件的文件并输出到屏幕或将查询结果写到文件
sed 选项 命令 文件
选项:
-n 对经过处理的行才会显示在屏幕上
-i 直接修改原文件中的数据
命令:
新增 a a后面可接受的字符,新字符插入到目前行的下一行 i i后面可接受的字符,新字符插入到目前行的上一行
替换 c c后面的字符,替换n1,n2之间的字符,s 替换
删除 d 删除指定行的字符
显示 p 显示指定行的字符
a)显示第几行记录,用字母p
单引号中的n表示第几行
显示第n行记录 sed -n 'n'p 文件名
显示第m,n行记录 sed -n 'm,n'p 文件名
显示最后一行记录 sed -n '$'p 文件名
b)显示包含条件的记录
sed -n '/tomcat/'p /var/log/tomcat.log
c)显示包含多个条件的记录
sed -e '/tomcat/'p -e '/2017-03-08/'p -n /var/log/tomcat.log
d)删除第几行记录,用字母d
单引号中的n表示第几行
删除第n行记录 sed -n 'n'd 文件名
删除第m,n行记录 sed -n 'm,n'd 文件名
删除最后一行记录 sed -n '$'d 文件名
e)替换字符,字符s表示替换,g表示在文件中所有出现的地方进行替换
sed '1,9s/09/nine/g' /var/log/tomcat.log
f)将匹配到字符进行位置替换,替换的字符用()包裹起来,括号前需加\,屏蔽特殊字符
sed 's/\(test\)\(log\)/\2\1/g' /var/log/tomcat.log
g)修改文件,字符s表示替换,g表示在文件中所有出现的地方进行替换
sed -i '1,9s/09/nine/g' /var/log/tomcat.log
3)awk
awk 用于从文件中截取符合条件的记录
awk 参数 过滤条件 文件
a)显示获取到的符合条件的记录,文件中的列以:分割,显示第3列记录
head -n10 /var/log/tomcat.log| awk -F':' '{print $3}'
b)显示符合条件记录
awk '/log/' /var/log/tomcat.log
c)显示符合多个条件记录
awk -F':' '/log/ {print $1,$4} /2017/ {print $2,$7}' /var/log/tomcat.log
d)可以进行逻辑条件的判断,> >= < <= !=等,条件中加""表示字符,否则表示为数字
awk -F':' '$2>100' /var/log/tomcat.log
内置函数
gsub(r,s):在$0中用s代替r
index(s,t):返回s中t的第一个位置
length(s):s的长度
match(s,r):s是否匹配r
split(s,a,fs):在fs上将s分成序列a
substr(s,p):返回s从p开始的子串
BEGIN和END本质是一个pattern。
BEGIN用于awk程序开始开始前,做一些初始化的工作;
END用于awk程序结束前,做一些收尾的工作。
awk中使用shell中定义的变量:使用单引号即可
awk中使用shell命令:使用双引号,或者system命令
getline:awk里,从文件中读取变量到awk中
FILENAME
FS 分隔符,默认是空格
NR 当前行数,从1开始
NF 当前记录字段个数
$0 当前记录
$1~$n 当前记录第n个字段
NF:用分割符分割后,产生的列数
$NF:最后1列的值