grep
1)缺点:不能对已知结果进行更改。
2)常用命令
查找指定进程和个数
[root@VM_0_15_centos ~]# ps -ef | grep mysql
[root@VM_0_15_centos ~]# ps -ef | grep -c mysql
2.2)查找多个文件相同的部分(每行比较)
[root@VM_0_15_centos demo]# cat 1.txt | grep -f 2.txt
从单个文件或多个文件查找指定内容并显示行号
[root@VM_0_15_centos demo]# cat 1.txt | grep 1 -n
1:我是相同的内容1
2:我是不同的内容1
指定字符串查找开头,非开头和结尾的内容
指定字符串开头:
[root@VM_0_15_centos demo]# grep "^a" 1.txt
a开头
非指定字符串开头:
[root@VM_0_15_centos demo]# grep "[a]" 1.txt
我是b同的内容1
我是相同的内容2结尾c
我是不同的内容2
指定字符串结尾:
[root@VM_0_15_centos demo]# grep "c$" 1.txt
我是相同的内容2结尾c
过滤指定日志里面的ip个数
[root@VM_0_15_centos demo]# cat 1.txt | grep -c "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"
3
[root@VM_0_15_centos demo]# cat 1.txt | grep "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"
10.10.20.138
我是相同的内10.10.20.134容2结尾c
10.10.20.139
过滤指定路径下所有文件里面包含指定字符内容
[root@VM_0_15_centos demo]# grep -r -n "10.10.20" 1.txt
1:10.10.20.138
3:我是相同的内10.10.20.134容2结尾c
4:10.10.20.139
显示文件总行数
[root@VM_0_15_centos demo]# grep -n "" 1.txt
1:root
2:
3:root:X:sdsdsd
4:
5:我是相同的内10.10.20.134容2结尾c
6:root`
7:
8:
9:
sed
1、sed默认不编辑原文件,而是逐行操作,复制一份到指定内存(模式空间);
2、模式空间内进行模式匹配,即和指定条件做匹配:
不满足,输出到标准输出;
满足:进行指定的模式操作,再输出到标准输出;
3、命令行:[root@www ~]# sed [-nefr] [动作]
常用命令:
将文件内容列出并且列印行号,同时将第2~3行删除
[root@VM_0_15_centos demo]# nl 1.txt | sed '2,3d'
1 10.10.20.138
4 10.10.20.139
删除第2行到最后一行
[root@VM_0_15_centos demo]# nl 1.txt | sed '2,$d'
1 10.10.20.138
删除第2行
[root@VM_0_15_centos demo]# cat -n 1.txt | sed '2d'
1 10.10.20.138
3 我是相同的内10.10.20.134容2结尾c
4 10.10.20.139
在第2行后(即加上第3行)加上‘drink tea’
[root@VM_0_15_centos demo]# cat -n 1.txt | sed '2adrink tea'
1 10.10.20.138
2 我是b同的内容1
drink tea
3 我是相同的内10.10.20.134容2结尾c
4 10.10.20.139
在第2行前加上‘drink tea’
[root@VM_0_15_centos demo]# cat -n 1.txt | sed '2idrink tea'
1 10.10.20.138
drink tea
2 我是b同的内容1
3 我是相同的内10.10.20.134容2结尾c
4 10.10.20.139
在第2行后增加两行
[root@VM_0_15_centos demo]# cat -n 1.txt | sed '2adrink tea or \
drink beer'
1 10.10.20.138
2 我是b同的内容1
drink tea or
drink beer
3 我是相同的内10.10.20.134容2结尾c
4 10.10.20.139
将2-3行的内容提还调
[root@VM_0_15_centos demo]# cat -n 1.txt | sed '2,3c asasas'
1 10.10.20.138
asasas
4 10.10.20.139
将2-3行的内容显示出来
[root@VM_0_15_centos demo]# cat -n 1.txt | sed -n '2,3p'
2 我是b同的内容1
3 我是相同的内10.10.20.134容2结尾c
查找指定行区间以XX开头的内容
[root@VM_0_15_centos demo]# sed -n '1,4{/^root/p}' 1.txt
root
root:X:sdsdsd
root`
匹配行之后增加显示内容
[root@VM_0_15_centos demo]# sed -n '/3/,$p' 1.txt
我是相同的内10.10.20.134容2结尾c
root`
[root@VM_0_15_centos demo]# sed -n '/3/,+1p' 1.txt
我是相同的内10.10.20.134容2结尾c
root
文本逆序输出(行逆序)
[root@VM_0_15_centos demo]# sed '1!G;h;$!d' 1.txt
root`
我是相同的内10.10.20.134容2结尾c
root:X:sdsdsd
root
显示行号
显示空行
[root@VM_0_15_centos demo]# sed '=' 1.txt
屏蔽空行
[root@VM_0_15_centos demo]# sed '/./=' 1.txt
显示文件总行数
[root@VM_0_15_centos demo]# sed -n "$=" 1.txt
9
显示偶数和奇数行
偶数行
[root@VM_0_15_centos demo]# sed -n 'n;p' 1.txt
[root@VM_0_15_centos demo]# sed -n '2~2p' 1.txt
奇数行
[root@VM_0_15_centos demo]# sed -n 'p;n' 1.txt
[root@VM_0_15_centos demo]# sed -n '1~2p' 1.txt
文件中每行内容逆向显示
[root@VM_0_15_centos demo]# cat 1.txt | sed '/\n/!G;s/(.)(.*\n)/&\2\1/;//D;s/.//'
指定内容替换(将root全部替换成mysql)
[root@VM_0_15_centos demo]# cat 1.txt | sed 's/root/mysql/g'
awk
1)支持过滤方式“列”匹配
2)可以嵌套循环使用
3)内置变量
FS 保存或设置分隔符,例如FS=",";
1,0 当前读入整行的文本内容;
NF 记录当前处理行的字段个(列)数;
NR 记录当前处理行的数量;
FNR 保存当前处理行在原文本内的行号;
FILENAME 当前处理的文本名;
ENVIRON 调用shell环境变量。
4)语法:
awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)###列匹配(列以空格或tab分割)
展示所有内容
[root@VM_0_15_centos demo]# cat 1.txt | awk '{print 1}'
查找当前剩余内存
free | grep Mem | awk '{print"当前剩余内存:\n",$7}'
访问IP过滤
grep "Accepted" /var/log/secure | awk '{print $11}'
统计每行有多少列
[root@VM_0_15_centos demo]# cat 1.txt | awk '{print NF}'
统计root出现的次数
[root@VM_0_15_centos demo]# cat 1.txt | awk -F[:/] '{i=1}{while(i<=NF){if($i~/root/){j++};i++}}END{print j}'
将列以[,]分割,然后展示第1列和第2列
[root@VM_0_15_centos demo]# cat 2.txt | awk -F '[,]' '{print 2}'
定义变量,将列以[,]分割,然后展示第1列和第1+a列
[root@VM_0_15_centos demo]# cat 2.txt | awk -F '[,]' -va=1 '{print (1+a)}'
将列以[,]分割,并将第1列大于2的行输出
[root@VM_0_15_centos demo]# cat 2.txt | awk -F '[,]' '$1>2'
将列以[,]分割,并将第1列等于2的行输出
[root@VM_0_15_centos demo]# cat 2.txt | awk -F '[,]' '1==2 {print 3}'
2 4
[root@VM_0_15_centos demo]# cat 2.txt | awk -F '[,]' '{print NR,FNR,2,$3}'
输出包含th的行
[root@VM_0_15_centos demo]# cat 2.txt | awk '/th/'
打印99乘法表
[root@VM_0_15_centos demo]# seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}'
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
网友评论