linux 三剑客(awk,sed,grep)
1、awk
在某些场景下,我们需要过滤方式希望是列来匹配,而不是sed的行来匹配,而且awk还可以嵌套for等循环去使用,拓展性强,当然awk也是最难的。
awk的常用命令选项:
- -F fs fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
- -v var=value 赋值一个用户定义变量,将外部变量传递给awk
- -f scripfile 从脚本文件中读取awk命令
- -m[fr] val 对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
awk内置变量:
- FS 保存或设置分隔符,例如FS=",";
- $N 指定分隔符的第N个字段,例如$1,$5代表第一列和第三列;
- $0 当前读入整行的文本内容;
- NF 记录当前处理行的字段个(列)数;
- NR 记录当前处理行的数量;
- FNR 保存当前处理行在原文本内的行号;
- FILENAME 当前处理的文本名;
- ENVIRON 调用shell环境变量。
简单练习(awk对文本每一行进行操作)
1、打印hiya 次数由文件passw的行数决定
》awk '{print "hiya"}' passw
2、找出:分割的第一个字符串》awk
-F
":"
'{ print "username: " $1 }'
passw
5、打印输出文本行数
3、输出20-30行
》awk '{if(NR>=20 && NR<=30) print $1}' test.txt
4、输出指定位置字符(用,和‘ ’两个字符分割字符串输出第三和第七个)
其中文本中为 a b c,d e f g----->输出结果为 c g
》awk -F '[ ,]+' '{print $3" "$7}' test.txt
》awk 'BEGIN {count=0;print "[start] user count is ",count} {count=count+1;print $0} END{print "[end] user count is ",count}' passwd 6、统计文件夹中所有文件占用量
》ll |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ",size}'
7、以tab为分隔符(+代表一个或多个)
》awk 'BEGIN{FS="\t+"}{print $1,$2,$3}' tab.txt
8、space+一个或多个空格
》awk -F [[:space:]+] '{print $1,$2}' space.txt
9、取第二行第四个字符串
》ifconfig eth0|awk -F [" ":]+ 'NR==2{print $4}' ## NR==2也就是取第2行
》awk '/root/{print $0}' passwd ##匹配所有包含root的行
》awk -F: '$5~/root/{print $0}' passwd ## 以分号作为分隔符,匹配第5个字段是root的行
用 awk 中查看服务器连接状态并汇总》netstat
-an|
awk
'/^tcp/{++s[$NF]}END{for(a in s)print a,s[a]}'
统计 web 日志访问流量,要求输出访问次数,请求页面或图片,每个请求的总大小,总访问流量的大小汇总
》awk
'{a[$7]+=$10;++b[$7];total+=$10}END{
for
(x
in
a)print b[x],x,a[x]|
"sort -rn -k1"
"total size is :"
total}'
/app/log/access_log
查找
awk 'BEGIN{info="this is a test2010test!";gsub(/[0-9]+/,"!",info);print info}' this is a test!test!
在 info 中查找满足正则表达式, /[0-9]+/ 用”!”替换,并且替换后的值,赋值给 info 未
给 info 值,默认是$0 替换
awk 'BEGIN{info="this is a test2010test!";print index(info,"test")?"ok":"no found";}'
ok #未找到,返回 0 匹配查找
awk 'BEGIN{info="this is a test2010test!";print match(info,/[0-9]+/)?"ok":"no found";}'
ok #如果查找到数字则匹配成功返回 ok,否则失败,返回未找到
截取
awk 'BEGIN{info="this is a test2010test!";print substr(info,4,10);}'
s is a tes #从第 4 个 字符开始,截取 10 个长度字符串
分割
awk 'BEGIN{info="this is a test";split(info,tA," ");print length(tA);for(k in tA){print k,tA[k];}}' 4
4 test 1 this 2 is 3 a
#分割 info,动态创建数组 tA,awk for …in 循环,是一个无序的循环。 并不是从数组下标
1…n 开始
awk常用内置变量
[root@Gin scripts]# cat recode.txt
Jimmy the Weasel
100 Pleasant Drive
San Francisco,CA 123456 Big Tony
200 Incognito Ave.
Suburbia,WA 64890
[root@Gin scripts]# cat awk.txt
#!/bin/awk
BEGIN {
FS="\n"
RS=""
}
{
print $1","$2","$3
}
[root@Gin scripts]# awk -f awk.txt recode.txt
Jimmy the Weasel,100 Pleasant Drive,San Francisco,CA 123456
Big Tony,200 Incognito Ave.,Suburbia,WA 64890
可以把代码写到文件中,使用时直接调用如:awk -F aa.txt demo.txt
awk其他实例:
1、列基本查询
2、当前内存过滤
3、访问ip过滤
4、统计每行有多少列(NF)
5、分别统计多个文件有多少行(NFR)
6、统计uid小于30的用户有多少和大于30的余户有多少(判断)
7、统计指定字段出现的个数(while循环)
8、统计ip出现的次数
1、列基本查询
[root@aly-centos7 /]# awk '{print $0}' passwd4 #$0代表整列
root x:0:0:root:/root:/bin/bash
bin x:1:1:bin:/bin:/sbin/nologin
daemon x:2:2:daemon:/sbin:/sbin/nologin
adm x:3:4:adm:/var/adm:/sbin/nologin
lp x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync x:5:0:sync:/sbin:/bin/sync
%shutdown x:6:0:shutdown:/sbin:/sbin/shutdown
$halt:x:7:0:halt:/sbin:/sbin/halt
#$mail x:8:12:mail:/var/spool/mail:/sbin/nologin
operator x:11:0:operator:/root:/sbin/nologin
567890
543210
[root@aly-centos7 /]# awk '{print $1}' passwd4 #$1代表第一列
root
bin
daemon
adm
lp
sync
%shutdown
$halt:x:7:0:halt:/sbin:/sbin/halt
operator
9876 2、当前内存过滤
首先要查看剩余内存是那个字段标记,然后标记的这一行用grep取出来,最后用awk把这一行的列取出来在加上一个可读性语句即可
[root@aly-centos7 /]# free | grep Mem | awk '{print"当前剩余内存:\n",$7}'
当前剩余内存:
1408424 3、访问ip过滤
/var/log/secure是用于记录访问的信息,可以通过这个日志来看出来是否遭受到恶意攻击
[root@aly-centos7 /]# grep "Accepted" /var/log/secure | awk '{print $11}'
101.95.130.134
101.95.130.134
101.95.130.134
101.95.130.134
101.95.130.134
101.95.130.134
101.95.130.134
101.95.130.134
[root@aly-centos7 /]#
通过过滤我就知道那些ip访问了,不过访问的ip数量很多,而生产服务器访问的ip都是固定的,一般都会有一个文件记录,这样可以写一个脚本和你过滤的ip比对,那些没有登记的就可以处理掉。 4、统计每行有多少列(NF)
[root@aly-centos7 /]# awk '{print NF}' passwd4
2
2
2
2
2
2
2
1
2
2
2
2
[root@aly-centos7 /]# cat passwd4
root x:0:0:root:/root:/bin/bash
bin x:1:1:bin:/bin:/sbin/nologin
daemon x:2:2:daemon:/sbin:/sbin/nologin
adm x:3:4:adm:/var/adm:/sbin/nologin
lp x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync x:5:0:sync:/sbin:/bin/sync
%shutdown x:6:0:shutdown:/sbin:/sbin/shutdown
$halt:x:7:0:halt:/sbin:/sbin/halt
#$mail x:8:12:mail:/var/spool/mail:/sbin/nologin
operator x:11:0:operator:/root:/sbin/nologin
1234 567890
9876 543210 5、分别统计多个文件有多少行(NFR)
[root@aly-centos7 /]# awk '{print FNR}' passwd3 passwd4
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
11
12 6、统计uid小于30的用户有多少和大于30的余户有多少(判断)
[root@aly-centos7 /]# awk -F: 'BEGIN{i=0;j=0}{if($3<=30){i++}else{j++}}END{print "<=30:"i,"\n",">=30:"j}' /etc/passwd
<=30:13
>=30:17 7、统计指定字段出现的个数(while循环)
[root@aly-centos7 /]# grep --color root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
dockerroot:x:993:991:Docker User:/var/lib/docker:/sbin/nologin
[root@aly-centos7 /]# awk -F[:/] '{i=1}{while(i<=NF){if($i~/root/){j++};i++}}END{print j}' /etc/passwd
5 8、统计ip出现的次数
[root@aly-centos7 httpd]# tail -10 access_log
172.16.163.69 - - [24/Jul/2018:13:39:12 +0800] "GET / HTTP/1.0" 403 4897 "-" "ApacheBench/2.3"
172.16.163.69 - - [24/Jul/2018:13:39:12 +0800] "GET / HTTP/1.0" 403 4897 "-" "ApacheBench/2.3"
172.16.163.69 - - [24/Jul/2018:13:39:12 +0800] "GET / HTTP/1.0" 403 4897 "-" "ApacheBench/2.3"
172.16.163.69 - - [24/Jul/2018:13:39:12 +0800] "GET / HTTP/1.0" 403 4897 "-" "ApacheBench/2.3"
172.16.163.69 - - [24/Jul/2018:13:39:12 +0800] "GET / HTTP/1.0" 403 4897 "-" "ApacheBench/2.3"
172.16.163.69 - - [24/Jul/2018:13:39:12 +0800] "GET / HTTP/1.0" 403 4897 "-" "ApacheBench/2.3"
172.16.163.69 - - [24/Jul/2018:13:39:12 +0800] "GET / HTTP/1.0" 403 4897 "-" "ApacheBench/2.3"
172.16.163.69 - - [24/Jul/2018:13:39:12 +0800] "GET / HTTP/1.0" 403 4897 "-" "ApacheBench/2.3"
172.16.163.69 - - [24/Jul/2018:13:39:12 +0800] "GET / HTTP/1.0" 403 4897 "-" "ApacheBench/2.3"
172.16.163.69 - - [24/Jul/2018:13:39:12 +0800] "GET / HTTP/1.0" 403 4897 "-" "ApacheBench/2.3"
[root@aly-centos7 httpd]# awk '{ip[$1]++} END{for(i in ip){print i,ip[i]}}' /var/log/httpd/access_log
172.16.163.69 1000
2、sed
sed 编辑器逐行处理文件(或输入),并将输出结果发送到屏幕。 sed 的命令就是在 vi和 ed/ex 编辑器中见到的那些。 sed 把当前正在处理的行保存在一个临时缓存区中,这个缓存区称为模式空间或临时缓冲。sed 处理完模式空间中的行后(即在该行上执行 sed 命令后),就把改行发送到屏幕上(除非之前有命令删除这一行或取消打印操作)。 sed 每处理完输入文件的最后一行后, sed 便结束运行。 sed 把每一行都存在临时缓存区中,对这个副本进行编辑,所以不会修改或破坏源文件。
因参数过多,个人将列举部分常用的参数
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
- d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
- i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
- p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
- s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g
Sed 命令在没有给定的位置时,默认会处理所有行;
Sed 支持一下几种地址类型:
1、 first~step
这两个单词的意思: first 指起始匹配行, step 指步长,例如: sed -n 2~5p 含义:从第二行开始匹配,隔 5 行匹配一次,即 2,7,12.......。
2、 $
这个$符表示匹配最后一行。
3、 /REGEXP/
这个是表示匹配正则那一行,通过//之间的正则来匹配。
4、 \cREGEXPc
这个是表示匹配正则那一行,通过\c 和 c 之间的正则来匹配,c 可以是任一字符
5、 addr1, add2
定址 addr1, add2 决定用于对哪些行进行编辑。地址的形式可以是数字、正则表达式或二者的结合。如果没有指定地址, sed 将处理输入文件中的所有行。如果定址是一个数字,则这个数字代表行号,如果是逗号分隔的两个行号,那么需要处理的定址就是两行之间的范围(包括两行在内)。范围可以是数字,正则或二者组合。 6、 addr1, +N 从 addr1 这行到往下 N 行匹配,总共匹配 N+1 行
7、 addr1, ~N
Will match addr1 and the lines following addr1 until the next line whose input line number is a multiple of N.【没有看懂是什么意思】
简单实例
sed '/north/p' ceshi.txt #打印ceshi.txt文件中所有的行同时匹配到north的行打印两遍 sed -n '/north/p' ceshi.txt #去掉默认输出只打印匹配的行 sed '3d' ceshi.txt #删除第三行 sed '3,$d' ceshi.txt #删除3-n行,只留下1-2行 sed '/north/d' ceshi.txt #删除匹配的行 sed 's/west/north/g' ceshi.txt #s 命令用于替换。命令末端的 g 表示在行内全局替换;也就是说如果每一行里出现多个west,所有的 west 都会被替换为 north。如果没有 g 命令,则只将每一行的第一 west 替换为 north。 sed 's/[0-9][0-9]$/&.5/' ceshi.txt #当“与”符号( &)用在替换串中时,它代表在查找串中匹配到的内容时。这个示例中所有以 2 位数结尾的行后面都被加上.5。 sed -n 's/Hemenway/Jones/gp' ceshi.txt #文件中出现的所有的 Hemenway 都被替换为 Jones,只有发生变化的行才会打印出来。选项-n 与命令 p 的组合取消了默认的输出。标志 g 的含义是表示在行内全局替换。 sed -n '5,/northeast/p' ceshi.txt #打印从第 5 行开始第一个以 northeast 开头的行之间的所有行。 sed -e '1,3d' -e 's/Hemenway/Jones/' ceshi.txt #选项-e 用于进行多重编辑。第一重编辑编辑删除第 1~3 行。第二重编辑将Hemenway 替换为 Jones。因为是逐行进行这两行编辑(即这两个命令都在模式空间的当前行上执行),所以编辑命令的顺序会影响结果。例如,如果两条命令都执行的是替换,前一次替换会影响后一次替换。 sed '/^north/a Hello world!' ceshi.txt #命令 a 用于追加。字符串 Hello, World!被加在以 north 开头的各行之后。如果要追加的内容超过一行,则除最后一行外,其他各行都必须以反斜杠结尾。 sed '/eastern/i Hello,world! ceshi.txt #在匹配的行的下一行插入hello,world! sed '/eastern/c Hello,world! ceshi.txt #把匹配的行替换成Hello,world! sed '/eastern/{n;s/AM/Archie/;}' ceshi.txt #如果在某一行匹配到模式 eastern, n 命令就指示 sed 用下一个输入行(即包含 AM MainJr 的那行)替换模式空间中的当前行,并用 Archie 替换 AM,然后打印该行,再继续往下处理 sed '1,3y/abcde/ABCDE/' ceshi.txt #y 命令把 1~3 行中小写命令字母都转换成了大写。正则表达式元字符对 y 命令不起作用。与替分隔符一样,斜杠可以被替换成其他字符 sed '5q' ceshi.txt #打印完第 5 行之后, q 让 sed 程序退出。 sed 's/^[0-9][0-9]*//g' sed.txt #删除所有行的开头数字。 grep -Eiv "^#|^$" ssh_config #删除文本中空行和空格组成的行及#号注释的行 sed 's/^[ ]*//' sed.txt 或者sed 's/^[[:space:]]*//' sed.txt #删除头的空格
其他实例
1、指定行区间查找以root开头的内容
2、匹配行之后增加显示内容
3、文本逆向排序输出
4、显示行号(空行也显示)或(空行不显示行号)
5、显示文件总行数
6、显示偶数和奇数行
7、文件中每行内容逆向显示
8、将数字按照“个十百”显示
9、删除指定内容
10、指定内容进行替换
1、指定行区间查找以root开头的内容
[root@aly-centos7 /]# sed -n '1,5{/^root/p}' passwd2
root:x:0:0:root:/root:/bin/bash
2、匹配行之后增加显示内容
[root@aly-centos7 /]# cat passwd3
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
root,root
root123
[root@aly-centos7 /]# sed -n '/3/,$p' passwd3 #显示第一次匹配到的3到最行一行输出
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
root,root
root123
[root@aly-centos7 /]# sed -n '/3/,+1p' passwd3#显示第一次匹配到的3到向下1行输出
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
root123
[root@aly-centos7 /]# 3、文本逆向排序输出
[root@aly-centos7 /]# cat passwd2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@aly-centos7 /]# sed '1!G;h;$!d' passwd2 #逆向排序
operator:x:11:0:operator:/root:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
[root@aly-centos7 /]# 4、显示行号(空行也显示)或(空行不显示行号)
operator:x:11:0:operator:/root:/sbin/nologin
[root@aly-centos7 /]#
[root@aly-centos7 /]# cat passwd2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin
[root@aly-centos7 /]# sed '=' passwd2 #不屏蔽空行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin
[root@aly-centos7 /]# sed '/./=' passwd2 #屏蔽空行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin 5、显示文件总行数
[root@aly-centos7 /]# grep -n "" passwd3
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:operator:x:11:0:operator:/root:/sbin/nologin
6:root,root
7:root123
[root@aly-centos7 /]# sed -n '$=' passwd3
[root@aly-centos7 /]# 6、显示偶数和奇数行
[root@aly-centos7 /]# grep -n "" passwd3
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:operator:x:11:0:operator:/root:/sbin/nologin
6:root,root
7:root123
[root@aly-centos7 /]# sed -n 'p;n' passwd3 #奇数行
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
root123
[root@aly-centos7 /]# sed -n '1~2p' passwd3 #奇数行
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
root123
[root@aly-centos7 /]# sed -n 'n;p' passwd3 #偶数行
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
root,root
[root@aly-centos7 /]# sed -n '2~2p' passwd3 #偶数行
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
root,root
[root@aly-centos7 /]# 7、文件中每行内容逆向显示
[root@aly-centos7 /]# cat passwd2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
%shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
$halt:x:7:0:halt:/sbin:/sbin/halt
#$mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin
9876543210
[root@aly-centos7 /]# sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//' passwd2
hsab/nib/:toor/:toor:0:0:x:toor
nigolon/nibs/:nib/:nib:1:1:x:nib
nigolon/nibs/:nibs/:nomead:2:2:x:nomead
nigolon/nibs/:mda/rav/:mda:4:3:x:mda
nigolon/nibs/:dpl/loops/rav/:pl:7:4:x:pl
cnys/nib/:nibs/:cnys:0:5:x:cnys
nwodtuhs/nibs/:nibs/:nwodtuhs:0:6:x:nwodtuhs%
tlah/nibs/:nibs/:tlah:0:7:x:tlah$
nigolon/nibs/:liam/loops/rav/:liam:21:8:x:liam$# nigolon/nibs/:toor/:rotarepo:0:11:x:rotarepo
0123456789
[root@aly-centos7 /]# 8、将数字按照“个十百”显示
[root@aly-centos7 /]# cat passwd2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
%shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
$halt:x:7:0:halt:/sbin:/sbin/halt
#$mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
9876543210
[root@aly-centos7 /]# sed ':a;s/\B[0-9]\{3\}\>/,&/;ta' passwd2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
%shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
$halt:x:7:0:halt:/sbin:/sbin/halt
#$mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
1,234,567,890
9,876,543,210
[root@aly-centos7 /]#
9、删除指定内容
删除1-5行内容
[root@aly-centos7 /]# grep -n "" passwd2 | sed '1,5d'
6:sync:x:5:0:sync:/sbin:/bin/sync
7:%shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:$halt:x:7:0:halt:/sbin:/sbin/halt
9:#$mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:
11:
12:operator:x:11:0:operator:/root:/sbin/nologin
13:1234567890
14:9876543210
删除奇数行:
[root@aly-centos7 /]# grep -n "" passwd2 | sed '1~2d'
2:bin:x:1:1:bin:/bin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
8:$halt:x:7:0:halt:/sbin:/sbin/halt
10:
12:operator:x:11:0:operator:/root:/sbin/nologin
14:9876543210
删除空行
[root@aly-centos7 /]# grep -n "" passwd2
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
7:%shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:$halt:x:7:0:halt:/sbin:/sbin/halt
9:#$mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:
11:
12:operator:x:11:0:operator:/root:/sbin/nologin
13:1234567890
14:9876543210
[root@aly-centos7 /]# grep "" passwd2 | sed '/^$/d'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
%shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
$halt:x:7:0:halt:/sbin:/sbin/halt
#$mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
9876543210
[root@aly-centos7 /]# 10、指定内容进行替换
将root全部替换成mysql
[root@aly-centos7 /]# grep -n "" passwd3
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:operator:x:11:0:operator:/root:/sbin/nologin
6:root,root
7:root123
[root@aly-centos7 /]# sed 's/root/mysql/g' passwd3
mysql:x:0:0:mysql:/mysql:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/mysql:/sbin/nologin
mysql,mysql
mysql123
把数字1全部替换成9
[root@aly-centos7 /]# sed 's/1/9/g' passwd3
root:x:0:0:root:/root:/bin/bash
bin:x:9:9:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:99:0:operator:/root:/sbin/nologin
root,root
root923
只替换行中未出现“sbin”字符的时候,将”root“替换成”nginx“
[root@aly-centos7 /]# sed '/sbin/!s/root/nginx/g' passwd3
nginx:x:0:0:nginx:/nginx:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
nginx,nginx
nginx123
root:x:11:0:operator:/root:/sbin/nologin
root1:x:11:0:operator:/root:/sbin/nologin
root2:x:11:0:operator:/root:/sbin/nologin
[root@aly-centos7 /]#
3、grep
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
grep家族总共有三个:grep,egrep,fgrep。
简单规则:grep [选项] ”模式“ [文件]
复杂规则:grep [
-
abcEFGhHilLnqrsvVwxy][
-
A<显示列数>][
-
B<显示列数>][
-
C<显示列数>][
-
d<进行动作>][
-
e<范本样式>][
-
f<范本文件>][
-
-
help
][范本样式][文件或目录...]
常用选项:
-E :开启扩展(Extend)的正则表达式。
-i :忽略大小写(ignore case)。
-v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。
-n :显示行号
-w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker
-c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。
-o :只显示被模式匹配到的字符串。
--color :将匹配到的内容以颜色高亮显示。
-A n:显示匹配到的字符串所在的行及其后n行,after
-B n:显示匹配到的字符串所在的行及其前n行,before
-C n:显示匹配到的字符串所在的行及其前后各n行,context
模式部分:
1、直接输入要匹配的字符串,这个可以用fgrep(fast grep)代替来提高查找速度,比如我要匹配一下hello.c文件中printf的个数:fgrep -c "printf" hello.c
2、使用基本正则表达式,下面谈关于基本正则表达式的使用:
匹配字符:
. :任意一个字符。
[abc] :表示匹配一个字符,这个字符必须是abc中的一个。
[a-zA-Z] :表示匹配一个字符,这个字符必须是a-z或A-Z这52个字母中的一个。
[^123] :匹配一个字符,这个字符是除了1、2、3以外的所有字符。
对于一些常用的字符集,系统做了定义:
[A-Za-z] 等价于 [[:alpha:]]
[0-9] 等价于 [[:digit:]]
[A-Za-z0-9] 等价于 [[:alnum:]]
tab,space 等空白字符 [[:space:]]
[A-Z] 等价于 [[:upper:]]
[a-z] 等价于 [[:lower:]]
匹配次数:
\{m,n\} :匹配其前面出现的字符至少m次,至多n次。
\? :匹配其前面出现的内容0次或1次,等价于\{0,1\}。
* :匹配其前面出现的内容任意次,等价于\{0,\},所以 ".*" 表述任意字符任意次,即无论什么内容全部匹配。
位置锚定:
^ :锚定行首
$ :锚定行尾。技巧:"^$"用于匹配空白行。
\b或\<:锚定单词的词首。如"\blike"不会匹配alike,但是会匹配liker
\b或\>:锚定单词的词尾。如"\blike\b"不会匹配alike和liker,只会匹配like
\B :与\b作用相反。
实例:
1、查找指定进程和个数
[root@aly-centos7 /]# ps -ef | grep nginx
root 14475 14272 0 13:21 pts/0 00:00:00 grep --color=auto nginx
[root@aly-centos7 /]# ps -ef | grep -c nginx
2、查看多个文件相同的部分
文件内容:
[root@aly-centos7 /]# cat passwd1
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:997:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
[root@aly-centos7 /]# cat passwd2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@aly-centos7 /]#cat passwd3
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
过滤结果:
[root@aly-centos7 /]# cat passwd1 | grep -f passwd2 | grep -f passwd3
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@aly-centos7 /]#
最后结果显示三个文件相同的部分
3、从单个和多个文件查找指定内容并显示行号
[root@aly-centos7 /]# cat passwd2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@aly-centos7 /]# cat passwd3
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
root,root
root123
[root@aly-centos7 /]# grep -n "root" passwd2
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
[root@aly-centos7 /]# grep -n "root" passwd2 passwd3
passwd2:1:root:x:0:0:root:/root:/bin/bash
passwd2:10:operator:x:11:0:operator:/root:/sbin/nologin
passwd3:1:root:x:0:0:root:/root:/bin/bash
passwd3:5:operator:x:11:0:operator:/root:/sbin/nologin
passwd3:6:root,root
passwd3:7:root123
[root@aly-centos7 /]#
4、指定字符查找开头,非开头,结尾的内容
[root@aly-centos7 /]# grep "^r" passwd3 #查找指定字符开头
root:x:0:0:root:/root:/bin/bash
root,root
root123
[root@aly-centos7 /]# grep "^[^r]" passwd3 #查找非指定字符开头
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@aly-centos7 /]# grep "n$" passwd3 #查找指定结尾
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@aly-centos7 /]# 5、过滤指定日志里面的ip个数
[root@aly-centos7 /]#cat qq.log | grep -c "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"
130205
6、过滤指定路径下所以文件里面包含指定字符内容
[root@aly-centos7 /]# grep -r -n "root" /etc/
/etc/logrotate.d/ppp:9: create 0600 root root
/etc/logrotate.d/mysql:9:# In case the root user has a password, then you
/etc/logrotate.d/mysql:10:# have to create a /root/.my.cnf configuration file
/etc/logrotate.d/mysql:15:# user= root
/etc/logrotate.d/mysql:19:# ATTENTION: The /root/.my.cnf file should be readable
/etc/logrotate.d/mysql:20:# _ONLY_ by root !
/etc/logrotate.d/mysql-mmm:8: create 640 root adm
/etc/logrotate.d/wpa_supplicant:5: create 0600 root root
/etc/logrotate.d/yum:6: create 0600 root root
/etc/rsyncd.conf:9:# use chroot = yes
/etc/statetab:5:# See $STATE_LABEL in /etc/sysconfig/readonly-root
/etc/statetab:9:# /root
/etc/group:1:root:x:0:
/etc/group:49:dockerroot:x:991:
/etc/passwd-:1:root:x:0:0:root:/root:/bin/bash
/etc/passwd-:10:operator:x:11:0:operator:/root:/sbin/nologin
Binary file /etc/aliases.db matches
/etc/mime.types:351:application/vnd.cyan.dean.root+xml
/etc/mime.types:382:application/vnd.dvb.notif-aggregate-root+xml
参考:
https://www.cnblogs.com/ppc-srever/p/9322973.html
https://www.cnblogs.com/ginvip/p/6376049.html
linux 三剑客(awk,sed,grep)的更多相关文章
- Linux 三剑客 -- awk sed grep
本文由本人收集整理自互联网供自己与网友参考,参考文章均已列出,如有侵权,请告知! 顶配awk,中配sed,标配grep awk 参考 sed 参考 grep 参考 在线查看linux命令速记表 app ...
- 性能工具之linux三剑客awk、grep、sed详解
前言 linux 有很多工具可以做文本处理,例如:sort, cut, split, join, paste, comm, uniq, column, rev, tac, tr, nl, pr, he ...
- 【转】如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等
如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等 你是否曾经有过要计算一个非常大的数据(几百GB)的需求?或在里面搜索,或其它操作——一些无法并 ...
- Linux实战教学笔记12:linux三剑客之sed命令精讲
第十二节 linux三剑客之sed命令精讲 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件 ...
- (转)不看绝对后悔的Linux三剑客之sed实战精讲
不看绝对后悔的Linux三剑客之sed实战精讲 原文:http://blog.51cto.com/hujiangtao/1923718 二.Linux三剑客之sed命令精讲 1,前言 我们都知道,在L ...
- Linux 三剑客之sed
目录 Linux 三剑客之sed 命令补充: sort命令 uniq命令 cut命令 tr命令 wc命令 三剑客 - sed 编辑模式: 定位分类: 实例如下: d模式--删除模式 p模式--打印 a ...
- Linux三剑客awk
Linux三剑客awk awk是一个强大的linux命令,有强大的文本格式化的能力,好比将一些文本数据格式化成专业的excel表的样式 awk早期在Unix上实现,我们用的awk是gawk,是GUN ...
- awk\sed\grep 补充
# awk\sed\grep 补充 以上命令中字符 / 在sed中作为定界符使用,也可以使用任意的定界符 sed's:test:TEXT:g' sed's|test|TEXT|g' 定界符出现在样式内 ...
- day14 linux三剑客之sed命令
day14 linux三剑客之sed命令 sed命令 Sed 主要用来自动编辑一个或多个文件.简化对文件的反复操作.编写转换程序等. sed(流式编辑器) : sed主要用来修改文件. 1.sed命令 ...
- <转>如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等
原文链接:http://www.vaikan.com/use-multiple-cpu-cores-with-your-linux-commands/ 你是否曾经有过要计算一个非常大的数据(几百GB) ...
随机推荐
- Activex在没有电子秤api的情况下获取串口数据
大二做B/S架构的项目使用了安衡电子秤CHS-D+R和一款扫码枪,两个设备的串口使用一样,这款电子秤是相当的坑,没有开发的api,无奈只能自己开发Activex了,在B/S架构中进行引用Activex ...
- Javaweb常用解决问题连接
1.javaweb的idea如何创建及配置web项目 https://www.jianshu.com/p/8d49d36a3c7e 2.servlet的建立以及部署 https://blog.csdn ...
- DesignPattern系列__07合成复用原则
基本介绍 合成复用原则的核心,就是尽量去使用组合.聚合等方式,而不是使用继承. 核心思想 1.找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起. 2.针对接口编程,而不是 ...
- SVG撑满页面
当viewBox属性固定,默认修改svg标签的宽高,svg都会按比例缩放 我们现在不想按比例缩放,需要svg撑满整个画面 这里只需为svg标签添加一个关键属性:preserveAspectRatio ...
- QLineEdit默认提示 setPlaceholderText
Setting this property makes the line edit display a grayed-out placeholder text as long as the text( ...
- 4、Work-Queue
Work Queues using the Java Client In the first tutorial we wrote programs to send and receive messag ...
- windows 下 创建项目的虚拟环境
一. 为何使用虚拟环境 虚拟环境是Python解释器的一个私有副本,在这个环境你可以安装私有包,而且不会影响系统中安装的全局Python解释器. 在这个虚拟环境中的所有安装包,都是针对此环境的,不会被 ...
- Docker容器服务(三)
一.创建容器 容器是Docker的另一个核心概念. 简单地说,容器是镜像的一个运行实例,所不同的是,它带有额外的可写文件层. 1.1创建一个容器 使用docker create命令创建的容器处于停止状 ...
- Missing write access to /usr/local/lib/node_modules npm ERR! path /usr/local/lib/node_modules
今天用npm下载yarn,出现Missing write access to /usr/local/lib/node_modules npm ERR! path /usr/local/lib/node ...
- (八)OpenStack---M版---双节点搭建---Cinder安装和配置
↓↓↓↓↓↓↓↓视频已上线B站↓↓↓↓↓↓↓↓ >>>>>>传送门 1.创建数据库并授权 2.获得admin凭证执行管理员命令并创建服务证书 3.创建块存储设备AP ...