linux四剑客-grep/find/sed/awk/详解-技术流ken
四剑客简介
相信接触过linux的大家应该都学过或者听过四剑客,即sed,grep,find,awk,有人对其望而生畏,有人对其爱不释手。参数太多,变化形式太多,使用超级灵活,让一部分人难以适从继而望而生畏,浅尝辄止即罢。有人熟练掌握,使其四剑客为己所用,在分析日志,分析文本,统计,批量修改中游刃有余,大大提高了工作效率。本篇博文将详细讲解四剑客的参数选项,以及使用案例,相信认真读完本篇博文你也可以使得四剑客真正为己所用。
四剑客之grep
1.几个概念
正则表达式:Regular Expression
作用:用一些特殊的字符来描述一个模式
字符:
普通字符:0-9 a-z A-Z
特殊字符(元字符):* . {} |
正则和通配符
正则是用于对文件中的内容进行过滤和匹配
通配符用于对文件名进行匹配
2.grep命令选项
作用:用于对文件中的内容进行过滤
原理:逐行对文件中的内容根据样式进行匹配,如果匹配成功就过滤出该行
格式:grep [options] PATTERN file
PATTERN:要匹配的模式
options:
-i:忽略文件中的内容的大小写
-o:仅仅显示所匹配到的内容(不显示整行)
-v:取反,用于获取不包含指定内容的行
--color:将匹配到的内容进行着色
-A num:在匹配到指定的行以后,额外显示下面的num行
-B num:在匹配到指定的行以后,额外显示上面的num行
-C num:在匹配到指定的行以后,额外显示上下各num行
正则表达式的特殊符号
. 表示任意一个字符
[] 表示范围内的一个字符
[^] 表示匹配范围以外的任意一个字符
* 表示其前面的字符出现任意次数(,,n)的情况(注意是匹配*前面的字符,比如*前面是5. *就表示匹配一个5或者0个或者n个5)
.* 表示任意长度的任意字符
? 表示其前面的字符出现最多一次的情况
\{m,n\} 表示其前面的字符出现最少m次,最多n次的情况
^ 匹配行首
$ 匹配行尾
\< 锚定单词首部
\> 锚定单词尾部
\(分组\)
\ 调用前面的第一个分组
\ 调用前面的第二个分组
扩展正则表达式
grep -E egrep
扩展正则表达式多了一个+号和一个或者|的符号而已
三剑客之grep案例
例子:显示出a.txt中不包含字母 c 的行
[root@ken ~]# grep -v "c" a.txt
例子:统计a.txt中包含字母q的行的数量
[root@ken ~]# grep "q" a.txt | wc -l
例子:过滤出包含大写字母的行
[root@ken ~]# grep "[A-Z]" a.txt
例子:匹配非数字字符
[root@ken ~]# grep "[^0-9]" a.txt
例子:查看包含字母a的行,要求显示该行上下各5行
[root@ken ~]# grep --color -C "a" a.txt
例子:过滤出一行中a在前,b在后的行
[root@ken ~]# grep --color "a.*b" b.txt
例子:匹配a和b之间有最少2个c最多5个c的行
[root@ken ~]# grep "ac\{2,5\}b" a.txt
例子:过滤出以# 为开头,且第二个字符是空格的行
[root@ken ~]# grep "^#[[:space:]]" a.txt
例子:过滤出行首和行位字母相同的行
[root@ken ~]# grep "^\([a-z]\).*\1$" a.txt
例子:过滤出第一个字符是#,且第二个字符串是非空字符,而且结尾是数字的行
[root@ken ~]# grep --color "^#[^[:space:]].*[0-9]$" a.txt
四剑客之find
1.简单介绍
特点:
查找速度相对慢
准确率高,而且可以根据文件的多种特性进行查找
原理:
find会在指定目录及其子目录中进行逐级查找
格式:
find [options] [路径] [查找条件] [执行的动作]
说明
路径:就是在哪个目录下进行查找
可以是绝对路径,也可以是相对路径
2.find的查找条件
-name 可以使用通配符
-iname忽略大小写
-groupname
-username
-gid
-uid
-nogroup 无属组
-nouser 无用户
-size 文件大小
-type 文件类型
-mtime 创建时间
-ctime 修改时间
-atime 访问时间
-perm 后面跟的权限
-exec find xxx -exec 命令 \;
组合条件(-a,-o,-not)
3.三剑客之find案列
例子:从当前位置下找出后缀是txt的文件和目录
[root@ken ~]# find ./ -name "*.txt"
例子:找文件的属主是 py22 的文件和目录
[root@ken ~]# find / -user "py22"
例子:找文件大小是1M的文件
[root@ken ~]# find / -size 1M
说明:
查找找结果是<=1M的文件
-size [+-]n
+:大于指定的值
-:小于指定的值
例子:找文件大小大于1G的文件
[root@ken ~]# find / -size +1G
例子:找一般文件
[root@ken ~]# find / -type f
例子:从/tmp下找出后缀是wps 或doc 或exel的文件
[root@ken ~]# ind /tmp/ -name *.doc -o -name *.exel -o -name *.wps
例子:找出系统中全部用户都有执行的权限的文件
[root@ken ~]# find / -perm -
-perm权限前面没有任何符号表示精确查找,比如查找666,查找出来的文件权限必须是666权限
-perm权限前面有/表示模糊查找,9个权限包含一个即可
-perm权限面前有-表示必须包含所指定的权限
例子:将tmp下有执行权限的文件中的执行权限去除
[root@ken ~]# find /tmp -perm / -exec chmod a-x {} \;
四剑客之awk
在说awk之前首先介绍几个小命令
1.几个小命令
cut命令
cut命令
作用:根据指定的分隔符来切割数据,然后显示指定的部分
选项
-d'字符':指定分隔符
-f#:指定显示分割后的那一部分数据
输出的情况
)输出一段:指定一个编号
)输出连续多段:编号-编号 -
)输出不连续多段:编号,编号... ,, # echo "bin:10:15:i am bin:/home/bin:/sbin/nologin" 例子:输出上面的15
# echo "bin:10:15:i am bin:/home/bin:/sbin/nologin" | cut -d':' -f3 例子:输出系统中全部用户的用户名和shell类型
# cat /etc/passwd | cut -d":" -f1,
sort命令
sort命令
作用:按字符进行比较和排序
格式:sort 选项 file
选项:
-t:指定分隔符
-k:根据切割后的那一段进行排序[根据切割后的那一段排序,不是取出来那一段]
-n:表示根据数字进行排序(默认是根据字符进行排序)
-f:忽略要比较的字符大小写
-u:去除重复的行(只要那个指定的字段重复,就认定是重复的行)
-r:按照降序排序 例子:对文件中的内容进行排序
# sort mypwd
(默认排序:针对每行的第一个字母的ASCII中的值进行比较排序) 例子:对文件中的内容按照冒号分割第二部分进行排序
# sort -t":" -k2
uniq命令
uniq命令[通常结合sort先进行排序,然后再使用该命令统计相同的行出现的次数]
作用:去除重复的行(相邻且相同,认定为重复)
选项:
-c:在行首用数字表示该行出现了多少次
-d:仅仅显示出现过重复的行
-u:仅仅显示那些没有出现重复过的行 例子:将文件中相同的行去重
# sort mypwd | uniq
2.awk命令
作用:逐行处理文件中的内容(读取一行,处理一行)
例子:输出用户的uid
# cat /etc/passwd | awk -F ":" '{prin t $3}'
处理过程
1)前面的cat将内容传递给awk
2)awk读取一行,然后执行-F进行分割,然后执行一次{ }
格式:
awk [options] '[pattern]{action}' fileName
说明
options:选项,比如 -F 指定分隔符
pattern:输出的条件,比如仅仅输出以#开头的行
action:按照选项切换,并且是符合条件的行,要执行的操作或者命令,比如输出
概念:
记录(record):一行就是一个记录
分隔符(field separator):进行对记录进行切割的时候所使用的字符
字段(field):将一条记录分割成的每一段
3.常用的内置变量
FILENAME:当前处理文件的文件名
FS(Field Separator):字段分隔符(默认是以空格为分隔符)
NR(Number of Rrecord):记录的编号(awk每读取一行,NR就加1)
NF(Number of Field):字段数量(记录了当前这条记录包含多少个字段)
ORS(Output Record Separator):指定输出记录分隔符(指定在输出结果中记录末尾是什么,默认是\n,也就是换行)[\n表示换行]
OFS(Output Field Separator):输出字段分隔符
RS:记录分隔符
4.awk常用使用方式总结
结合本人平时使用总结可如下五种平时最常用的方式
1.结合内置变量,打印指定的几行,以及字段数量
例子:输出有多余5个字段的行的第三个字段
# cat a.sh | awk -F ":" 'NF>=5{print $3}'
例子:输出每行行号和该行有几个字段
# cat a.sh | awk -F ":" '{print NR,NF}'
例子:输出用户名,要求所有用户显示在同一行,而且用空格分隔
# cat mypwd | awk 'BEGIN{FS=":"; ORS=" "}{print $1}'
2.结合正则来匹配一行或者某个字段
例子:输出用户名以s为开头的用户的uid
# cat mypwd | awk -F ":" '/^s/{print $}'
例子:输出第五个字段是以t为结尾的用户的姓名
# cat mypwd | awk -F ":" '$5~/t$/{print $1}'
3.采用比较符号来进行打印指定的某些行
# cat mypwd | awk 'NR>=3&&NR<=5{print NR,$1}'
或
# cat mypwd | awk 'NR==3,NR==5{print NR,$1}'
例子:实现仅仅输出3 和 5 和 7行的内容,每行前面添加一个行号
# cat mypwd | awk 'NR==3||NR==5||NR==7{print NR,$1}'
4.结合BEGIN和END模块统计和N++等计算某些字段和行出现的次数
例子:统计mypwd中以#开头的行有多少行
# cat mypwd | awk 'BEGIN{n=0}/^#/{n+=1}END{print n}'
统计:mypwd中,以:为分隔符,字段数量在3-5的行的数目
# cat mypwd | awk 'BEGIN{FS=":"}NF>=3&&NF<=5{n+=1}END{print n}'
5.数组。定义一个数组采用 {ip[$3]++}END{for (i in 数组名ip)print i,ip[i]}
例子:统计IP
[root@centos6-2 tmp]# cat url.txt | awk -F "/+" '{urls[$2]++}END{for(key in urls)print key, urls[key]}’
四剑客之sed
1.简介
文本编辑器,也是对文件中的内容进行逐行的处理(一次处理一行)
sed的工作原理
sed读取一行,首先将这行放入到缓存中
然后,才对这行进行处理
处理完成以后,将缓冲区的内容发送到终端
存储sed读取到的内容的缓存区空间称之为:模式空间(Pattern Space)
格式:sed [options] file
2.选项
-p:打印输出(会将模式空间中的内容连同处理的行的结果一并输出)[Print 使用该选项后不要和-i一起使用,否则文本内容会被替换为只有指定的那些行
如果需要验证的话只需要使用-p和-n进行验证即可,不要加上-i
-n和-i也不要一起使用]
n:使用静默模式(不输出模式空间中的内容)[可以理解为no模式空间]
-r:使用扩招正则表达式中的符号[正则regular]
-i:直接修改原始文件(默认是修改模式空间中的文件副本)[In place直接在文件里面修改]
!:对命令的执行结果取反(不显示命令找到的内容)[和awk一样使用单引号]
&:引用前面的搜索结果
3.操作
a:添加
i:插入
d:删除
p:打印输出
s:字符串替换
c:做行替换
r: 从一个文件中读取到另一个文件中
w: 从一个文件中将匹配的内容写入到另外一个文件中
4.sed用法总结
结合本人使用,总结了如下sed常用用法
1.查找指定的字符串
例子:显示/etc/passwd中保含root的行(显示模式空间中的内容)
方法1:set '/root/p' /etc/passwd
方法2:cat /etc/passwd | sed '/root/p'
2.在指定的位置做增删
例子:删除以root为开头的行
# sed '/^root/d' a.txt
例子:在包含root的行后添加一行 i am zxhk
# sed '/root/a i am zxhk' a.txt
3.按行替换
例子:将5到9行的内容替换为 i am zxhk
# sed '5,9c i am zxhk' a.txt
4.按照字符替换
例子:将/etc/selinux/config中的SELINUX=enforcing改成 disabled
写法1:# sed -i 's/SELINUX=disabled/SELINUX=enforcing/g' config
写法2:# sed -r -i 's/(SELINUX=)disabled/\1enforcing/g' config
5.查找指定的内容再做替换
例子:将以r开头的行中的oo替换为qq
# sed '/^r/{s/oo/qq/g}' passwd
6.多点编辑
例子:去除文件中的注释行和空白行
# grep -v -E "(^#)|(^$)" passwd.bak >passwd
# cat passwd.bak | sed -e '/^#/d' -e '/^$/d' >passwd
7.取反操作
显示非1-3行
# sed -n '1-3!p' passwd
linux四剑客-grep/find/sed/awk/详解-技术流ken的更多相关文章
- iptables实战案例详解-技术流ken
简介 关于iptables的介绍网上有很多的资料,大家可以自己找一些关于iptables的工作原理,以及四表五链的简介,对于学习iptables将会事半功倍.本博文将会例举几个工作中常用的iptabl ...
- MySQL系列详解三:MySQL中各类日志详解-技术流ken
前言 日志文件记录了MySQL数据库的各种类型的活动,MySQL数据库中常见的日志文件有 查询日志,慢查询日志,错误日志,二进制日志,中继日志 .下面分别对他们进行介绍. 查询日志 1.查看查询日志变 ...
- cobbler批量安装系统使用详解-技术流ken
前言 cobbler是一个可以实现批量安装系统的Linux应用程序.它有别于pxe+kickstart,cobbler可以实现同个服务器批量安装不同操作系统版本. 系统环境准备及其下载cobbler ...
- systemd服务详解-技术流ken
简介 在centos5中生成和管理用户空间中的进程以及完成系统的初始化使用的是init,并且是依次启动.在centos6中则是使用的upstart,在一定程度上实现了并行启动,但是仍然存在依赖关系,到 ...
- KVM虚拟化使用详解--技术流ken
KVM介绍 Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中. KVM的虚拟化需要硬件支持 ...
- MySQL系列详解五: xtrabackup实现完全备份及增量备份详解-技术流ken
xtrabackup简介 xtrabackup是一个用来对mysql做备份的工具,它可以对innodb引擎的数据库做热备.xtrabackup备份和还原速度快,备份操作不会中断正在执行的事务,备份完成 ...
- xshell连接虚拟机详解--技术流ken
xshell连接虚拟机 第一步:网络模式更改为桥接模式 第二步:重启网络 [root@ken1 ~]# systemctl restart network 第三步:获取IP地址 输入命令ip a 第四 ...
- grafana使用详解--技术流ken
grafana简介 Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知.它主要有以下六大特点: 1.展示方式:快速灵活的客户端图表,面板插件有 ...
- pxe+kickstart自动化批量安装系统详解-技术流ken
前言 pxe+kickstart是一款可以实现自动化批量安装系统的服务,比较经典,下面将详细介绍此服务的安装和使用. 系统环境准备 系统版本:CentOS release 6.7 (Final) 内网 ...
随机推荐
- [小结] 中山纪念中学2018暑期训练小结(划掉)(颓废记)-Day10
[小结] 中山纪念中学2018暑期训练小结(划掉)(颓废记)-Day10 各位看众朋友们,你们好,今天是2018年08月14日,星期二,农历七月初四,欢迎阅看今天的颓废联编节目 最近发生的灵异事件有 ...
- ASCII记录
符号 十进制 + 43 - 45
- dva-counter
dva实例Counter. import dva, { connect } from 'dva'; import { Router, Route } from 'dva/router'; import ...
- hightopo自己用开源的方案重构一遍
经过一年多的学习吧前面路上的坑基本算踩过一遍了 所以下面计划吧hightopo网站上的demo用自己的方式重新写一遍
- git 创建项目
Command line instructions Git global setup git config --global user.name "quliangliang" gi ...
- [XAF] Llamachant Framework Modules
Llamachant Framework Modules 最近更新 2018-08-22 *变更:我们从所需的模块列表中删除了审计跟踪模块.如果要在应用程序中使用Audit Trail功能,请将Aud ...
- [已解决]Cannot find one or more components.Please reinstall the application
Microsoft SQL Server Management Studio 17,一段时间未用出现Cannot find one or more components.Please reinstal ...
- 团队作业第六周--alpha阶段项目复审
组名 优点 缺点 排名 天冷记得穿秋裤队 支持文件离线下载,没有限速 部分功能未实现 1 中午吃啥队 点餐系统需求高,系统功能完善 界面可以再完善 2 小谷围驻广东某工业719电竞大队 项目贴近大学生 ...
- day_8文件的操作
首先昨天讲的内容有 类型转换 1:数字类型: int () bool() float() 2:str 与int: int('10') | int('-10') | int('0') | fl ...
- python 二分查找法
@source_data:数据集 @binary_num:要查找的数 @mid:中间数的键值 def binary_search(source_data,search_num): #传入数据集计算中间 ...