四剑客简介

相信接触过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的更多相关文章

  1. iptables实战案例详解-技术流ken

    简介 关于iptables的介绍网上有很多的资料,大家可以自己找一些关于iptables的工作原理,以及四表五链的简介,对于学习iptables将会事半功倍.本博文将会例举几个工作中常用的iptabl ...

  2. MySQL系列详解三:MySQL中各类日志详解-技术流ken

    前言 日志文件记录了MySQL数据库的各种类型的活动,MySQL数据库中常见的日志文件有 查询日志,慢查询日志,错误日志,二进制日志,中继日志 .下面分别对他们进行介绍. 查询日志 1.查看查询日志变 ...

  3. cobbler批量安装系统使用详解-技术流ken

    前言 cobbler是一个可以实现批量安装系统的Linux应用程序.它有别于pxe+kickstart,cobbler可以实现同个服务器批量安装不同操作系统版本. 系统环境准备及其下载cobbler ...

  4. systemd服务详解-技术流ken

    简介 在centos5中生成和管理用户空间中的进程以及完成系统的初始化使用的是init,并且是依次启动.在centos6中则是使用的upstart,在一定程度上实现了并行启动,但是仍然存在依赖关系,到 ...

  5. KVM虚拟化使用详解--技术流ken

    KVM介绍 Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中. KVM的虚拟化需要硬件支持 ...

  6. MySQL系列详解五: xtrabackup实现完全备份及增量备份详解-技术流ken

    xtrabackup简介 xtrabackup是一个用来对mysql做备份的工具,它可以对innodb引擎的数据库做热备.xtrabackup备份和还原速度快,备份操作不会中断正在执行的事务,备份完成 ...

  7. xshell连接虚拟机详解--技术流ken

    xshell连接虚拟机 第一步:网络模式更改为桥接模式 第二步:重启网络 [root@ken1 ~]# systemctl restart network 第三步:获取IP地址 输入命令ip a 第四 ...

  8. grafana使用详解--技术流ken

    grafana简介 Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知.它主要有以下六大特点: 1.展示方式:快速灵活的客户端图表,面板插件有 ...

  9. pxe+kickstart自动化批量安装系统详解-技术流ken

    前言 pxe+kickstart是一款可以实现自动化批量安装系统的服务,比较经典,下面将详细介绍此服务的安装和使用. 系统环境准备 系统版本:CentOS release 6.7 (Final) 内网 ...

随机推荐

  1. [swarthmore cs75] Compiler 1 – Adder

    课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业.本随笔记录了相关的课堂笔记以及第3次大作业. 编译的过程:首先解析(parse)源代码,然后成抽象语法树(AST),再生成汇编 ...

  2. Golang处理数据库的nil数据

    在用golang获取数据库的数据的时候,难免会遇到可控field.这个时候拿到的数据如果直接用string, time.Time这样的类型来解析的话会遇到panic. 那么如何处理这个问题呢,第一个出 ...

  3. linux下使用iptables统计ip/端口流量

    1.添加ip/端口的流量统计 入网流量: iptables -A INPUT -d 出网流量: iptables -A OUTPUT -s 2.查看流量统计信息 iptables -L -v -n - ...

  4. How to setup Visual Studio without pain

    Visual Studio (VS) can be very hard to install. If you are lucky, one whole day may be enough to ins ...

  5. HTML和CSS初级前端面试题汇总(持续补充)

    1.浏览器内核 IE:trident Firefox:gecko Safari:webkit Opera:以前是presto,现在是Blink Chrome:Blink 2.HTML文件开头的DOCT ...

  6. Centos 安装 mysql yum

    http://www.cnblogs.com/007sx/p/7083143.html https://www.linode.com/docs/databases/mysql/how-to-insta ...

  7. Memcached未授权访问

    概念 memcached是一个内存中的键值存储区,用于存储来自数据库调用.API调用或页面呈现结果的任意小数据块(字符串.对象).memcached简单但功能强大.其简单的设计促进了快速部署.易于开发 ...

  8. git常用的命令行

    git管理相关基础命令行,因为现在很多公司都用git管理代码,所以被问及的概率很大,可以用pycharm的git系统,也可以用git代码管理 $git init #初始化仓库$git branch 分 ...

  9. 使用ILSpy软件反编译.Net应用程序的方法及注意事项

    今天遇到之前同事写的代码没有源码了,但是客户要在原来的基础上修改程序!好在没有做加壳处理,所以就用了ILSpy软件进行反编译!下面把步骤及遇到的问题写下来: 1.打开ILSpy软件,点击File  , ...

  10. [翻译] Visual Studio 2019: 极速编码. 智能工作. 创造未来.

    原文: Visual Studio 2019: Code faster. Work smarter. Create the future. Visual Studio 2019 的正式版现在可以下载了 ...