Liunx三剑客2022-11-10

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 # 输出全行的数据

-n -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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容