grep
对文本内容进行筛选
grep [option] [pattren] file
-i、v、o、q、E参数的选择
-c # 统计行数
-v与o的意义相反
找出所有的空行
每行的结尾都有一个$符号
grep '^$' -n
过滤
grep '^#' -v xxx |grep '^$'
-[],以及[^]反义匹配
扩展使用
使用前需要 grep -E 'xxx' xxx
-+
-?
-|
-() # 分组过滤括号内的内容
grep -E 'g(oo|ld)d' text.txt
-" .. "
grep -E "(l..e).*\1" text.txt
-" {n.m} "
sed
对文本或者数据流进行加工处理
sed [选项] [命令字符] [输入文件]
-n # 取消默认输出
-i # 将处理结果写入源文件
-e # 多次编辑
-r # 支持扩展正则表达
命令字符
-a,d,i,p,s///g等
用于在抓取文件之中进行处理
例子
-sed -n "2,3p" xxx # 查找特殊行
-sed "/xxx/d" xxx -n # 删除
-sed "s/xxx/xxx/g" xxx -i
-sed -e "s/xxx/xx/g" -e "s/xx/xx/g" xxx
-sed "xxa osksk" xxx -i
空模式的匹配
-sed "a --------" xxx
列子
去头去尾操作
sed "2p" -n |sed "s/^.*inet//"|sed "s/net.*$//"
sed -e "2s/^.*inet//" -n -e "2s/net.*$//p" -n
awk
对文本进行格式化处理,默认用空格作为分隔符,多个空格也认为是一个分隔符
awk options pattern {action} file
awk '{print $0}' file # 输出全行的数据
-0
-FS # 以其他的字符作为分隔
-NF # 字段的总数量
-NR # 输出文本的行数
awk '{print $1,$2,$3}' xxx.txt
awk '{print "第一列:"$1}' xxx.txt
awk '{print"每一行的内容"$0}' xxx.txt
awk 'NR==5,NR==6{print $0}' xxx.txt # 定位第五行并输出
awk '{print NR,$0}' xxx.txt # 为每一行加上行号
awk '{print $1,$(NF-)}' xxx.txt # 取出第一列,倒数第二列
进阶用法
-FS
-OFS
awk 'NR==2,NR==6{print $1}' xxx.txt
ifconfig eth0|awk 'NR==2{print $1}'
awk -F ":" '{print $0}' pwd.txt
awk -F ":" '{print $1,$(NF-1)}' pwd.txt
awk -v FS=":" '{print $1,$(NF-1)}' pwd.txt # 输入自定义分隔符
awk -F ":" '{print $1,"-------"$NF}' pwd.txt
awk -F ":" -v OFS="------" '{print $1,$NF}' pwd.txt #自定义输出分隔符号
修改切隔的分隔符号
awk -F ":" '{print $1}' pwd.txt
awk -v FS=":" '{print $1}' pwd.txt #修改文件以“:”用作分隔符
-RS
-ORS
内置变量和自定义变量
参数参考表
awk -v FS=":" '{print NR,NF,$1}' pwd.txt
awk -v FS=":" '{print NR,$1,$(NF-1)}' pwd.txt
awk '{print FNR,$0}' casns.txt sadj.txt #分别输出俩个文件内容
awk -v RS=" " '{print NR,$0}' pwd.txt # 修改输出的分隔符号
awk -v ORS="xxx" '{print NR,$0}' pwd.txt # 修改结尾的输出符号
awk -v ORS="xxx" '{print FILENAME,$0}' pwd.txt #输出文件名
ARGV数组变量
由命令行传入系统内置的数组
awk 'BEGIN{print "sadsa"} {print ARGV[1],$0}' pwd.txt
awk -v myname="yj" 'BEGIN{print "yjyj",myname}' #自定义变量操作
在awk之中可以通过$符号可以进行全局变量和局部变量的调用
printf和print的区别
printf之后没有换行,必须指定一个格式
awk '{printf $0}' pwd.txt
awk '{printf "%s\n",$0}' pwd.txt # %s 用于代替输入的全部文件
-%d # 代表一个参数,必须与之后的数字一一对应
统计访问用户信息
awk '{print $1}' access.log |sort -n |uniq -c|sort -nr |head -10