Linux四剑客grep、find、sed、awk使用
介绍
Linux四剑客是指在Linux系统中非常常用的四个命令工具,它们分别是grep、find、sed和awk。这四个工具在Linux系统中具有非常强大的功能,可以方便快捷地对文本进行搜索、处理和查找。
grep命令
作用
grep命令主要用于过滤文件内容,在文件中找到你需要或者不要的内容,类似与一个漏斗.
语法
grep [选项] [关键字] 文件
常用选项说明
这里只列出了实际工作中常用的选项,如果有其它的选项漏掉的,可以进行评论
- -i:不区分关键字的大小写,ignore case
- -n:显示文件的行号
- -v:取反,排除关键字
- -r:递归搜索指定目录下的所有文件,例如
grep -r "pattern" /path/to/directory
- -c:计数,只返回匹配的行数,类似
wc -l
命令 - -e:同时搜索多个模式,匹配任意一个即可。例如
grep -e "pattern1" -e "pattern2" file.txt
- -E:可以使用正则表达式,例如
grep -E "pattern1|pattern2" file.txt
- -l:在多个文件中搜索时,只显示包含匹配模式的文件名,而不是文件内容。例如
grep -l "pattern" *.txt
- -L:在多个文件中搜索时,只显示不包含匹配模式的文件名。例如
grep -L "pattern" *.txt
- -C:显示匹配行前后的指定行数。例如
grep -C 2 "pattern" file.txt
- -F:匹配包含固定字符串的行。例如
grep -F "fixed" string file.txt
- -A:显示匹配行后的指定行数。如
grep -A 2 "pattern" file.txt
- -B:显示匹配行前的指定行数。如
grep -B 2 "pattern" file.txt
find命令
作用
find 是一个在 Linux 和 Unix 系统中非常强大的命令行工具,用于在文件系统中搜索文件和目录。它可以根据文件名、路径、大小、修改时间、权限等多种条件进行搜索
语法
find [搜索路径] [选项] [表达式]
- 搜索路径,指定从哪个目录开始搜索,如果不指定搜索深度,默认会在指定目录下递归搜索。如果不指定目录,默认从当前目录开始
- 选项:用于控制搜索行为,例如递归深度,搜索类型等
- 表达式:用于定义搜索条件,如文件名、大小、修改时间等
常用选项
- -name:根据文件名搜索
#搜索/etc目录下hosts文件
[root@master:~]# find /etc/ -name "hosts"
/etc/hosts
#搜索/etc目录下所有以conf结尾的文件
[root@master:~]# find /etc -name "*.conf"
/etc/nscd.conf
/etc/nsswitch.conf
...
/etc/modules-load.d/modules.conf
/etc/request-key.d/id_resolver.conf
/etc/kubernetes/scheduler.conf
- -type:指定文件类型
- f:文件类型为普通文件
- d:文件类型为目录
- l:文件类型为符号链接
# 搜索/etc目录下所有的目录
[root@master:~]$ find /etc/ -type d
# 搜索/etc目录下所有的文件
[root@master:~]$ find /etc/ -type f
# 搜索/etc目录下所有的符号连接
[root@master:~]$ find /etc/ -type l
- -size:根据文件大小搜索
- +n:文件大于n
- -n:文件小于n
- n:文件等于n
- 单位:
c
(byte)、k
(kb)、M
(Mib)、G
(Gib)
# 搜索/etc目录下大于10K的文件
[root@master:~]$ find /etc/ -size +10k
/etc/login.defs
/etc/X11/rgb.txt
/etc/ld.so.cache
- -mtime:根据文件修改时间搜索,单位天。
- +n:超过 n 天。
- -n:少于 n 天。
- n:正好 n 天。
#查找etc目录下修改时间大于30天的文件
[root@master:~]$ find /etc/ -mtime +30
- -mmin:根据文件修改时间搜索,单位分钟
- +m:超过 m 分钟
- -m:少于 m 分钟
- m:正好 m 分钟
#查找etc目录下修改时间大于30分钟的文件
[root@master:~]$ find /etc/ -mmin +30
- -perm:根据文件权限进行搜索
[root@master:~]$ find /etc/ -perm 755
- -user:根据文件拥有者进行搜索
# 搜索etc目录下,用户为root的文件
[root@master:~]$ find /etc/ -user root
- -group:根据文件所属组进行搜索
[root@master:~]$ find /etc/ -group root
- -maxdepth:限制搜索的最大深度,也就是指定递归搜索的深度
1代表指定目录下,2代表指定目录下的下一层目录,依次递归下去
# 查找当前目录下以conf结尾的文件
[root@master:~]$ find /etc/ -maxdepth 1 -name "*.conf"
- -empty:查找空目录或空文件
# 查找空目录
[root@master:~]$ find /etc/ -type d -empty
# 查找空文件
[root@master:~]$ find /etc/ -type f -empty
- -delete:直接删除文件
# 查找到空文件直接删除
[root@master:~]$ find /var/ -type f -empty -delete
- -exec:对搜索到的文件执行命令
# 查找到空文件进行删除
[root@master:~]$ find /var/ -type f -empty -exec rm -f {} \
- -a:使用-a(逻辑与,and)或者默认的空格分隔符组合多个条件
[root@master:~]$ find /path/to/search -type f -size +10M -mtime +30
- -o:使用-o(逻辑或,or)组合多个条件
#搜索文件扩展名为txt或log的文件
[root@master:~]$ find /path/to/search \( -name "*.txt" -o -name "*.log" \)
sed命令
sed(Stream Editor)是一个流式文本编辑器,用于对文本进行快速的、非交互式的编辑。它能够对输入的文本进行各种操作,如替换、删除、插入、提取等,并将结果输出到标准输出(stdout)。
基本语法
sed [选项] '编辑命令' 文件名
- 选项:用于控制 sed 的行为,例如 -i 表示直接修改文件,-n 表示静默模式。
- 编辑命令:定义对文本的具体操作,通常放在单引号或双引号中。
- 文件名:指定要处理的文件。如果省略文件名,sed 会从标准输入读取数据。
sed
常用选项:
- -n:默认情况下,sed会在所有的脚本执行完毕后,自动输出处理后的内容,而该选项会屏蔽自动输出,需要使用print命令来完成输出。一般结合p使用
- -i:此选项会直接修改源文件,要慎用
- -i.bak:先备份再修改文件内容,推荐使用
- -r:支持扩展正则
sed
打印行
示例一:打印出文件所有的内容
[root@master:~]# sed '' /etc/passwd
root:x:0:0:root:/root:/bin/bash
#...省略万字内容
devops:x:1000:1000::/home/devops:/bin/sh
示例二:打印出文件的第五行数据
[root@master:~]# sed -n '5p' /etc/passwd
sync:x:4:65534:sync:/bin:/bin/sync
示例三:打印出文件的第五行至第十行数据
[root@master:~]# sed -n '5,10p' /etc/passwd
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
示例四:打印出文件的最后一行数据
[root@master:~]# sed -n '$p' /etc/passwd
devops:x:1000:1000::/home/devops:/bin/sh
sed
过滤内容
示例一:过滤包含root的行
[root@master:~]# sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
示例二:过滤包含root和devops的行
[root@master:~]# sed -nr '/root|devops/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
devops:x:1000:1000::/home/devops:/bin/sh
sed
替换文件内容
语法:
sed [选项] 's#源内容#要修改的内容#g' 文件名
选项说明:
-i:替换文件
-i.bak:先备份文件为源文件名.bak
示例:
# 先模拟数据
[root@master:~]# cat>1.txt<<EOF
> huangsir
> huangsir
> huangsir666
> EOF
# 不加-i选项,发现并没有替换文件内容
[[root@master:~]]# sed s#huangsir#root#g 1.txt
root
root
root666
[root@master:~]# cat 1.txt
huangsir
huangsir
huangsir666
# 添加-i.bak进行替换
root@master:~# sed -i.bak s#huangsir#root#g 1.txt
root@master:~# ll 1.txt 1.txt.bak
-rw-r--r-- 1 root root 18 Apr 17 16:28 1.txt
-rw-r--r-- 1 root root 30 Apr 17 16:26 1.txt.bak
root@master:~# cat 1.txt
root
root
root666
root@master:~# cat 1.txt.bak
huangsir
huangsir
huangsir666
# 直接修改,不备份
root@master:~# sed -i s#huangsir#root#g 1.txt.bak
root@master:~# cat 1.txt.bak
root
root
root666
示例:分组进行替换
root@master:~# echo 123456 | sed -r 's#(12)(34)(56)#\1\2\3#g'
123456
root@master:~# echo 123456 | sed -r 's#(12)(34)(56)#\3\2\1#g'
563412
sed
删除内容
编辑命令中添加d可以删除文件内容
示例:删除某一行的数据
# 删除第一行的数据
sed -i '1d' 1.txt
# 删除最后一行的数据
sed -i '$d' 1.txt
# 删除前缀为1的行
sed -i '/^1/d' 1.txt
sed
增加文件内容
指令:
- c:replace:clean 清空指定行,然后写入内容
- a:apennd,在指定那行下面增加一行
- i:insert,在指定那行上面增加一行
示例:在文件第一行下增加一行数据
# 在第一行后追加一行haha数据
sed -i '1a haha' 1.txt
awk命令
awk
能够对文本文件进行复杂的分析、处理和格式化操作。与 sed 不同,awk 更适合处理结构化的文本数据,例如带有分隔符的表格数据。
作用:取行、取列、统计与计算
语法
awk [选项] '模式 {动作}' 文件名
常用选项
- -F:指定字段分隔符(默认为空白字符,如空格或制表符)。
- -f:从文件中读取 awk 脚本。
- -v:定义变量的初始值
使用awk取行
awk中内置变量NR
表示行
示例:
# 取出第一行的数据
root@master:~# awk 'NR==1' /etc/passwd
root:x:0:0:root:/root:/bin/bash
# 取出第三行到第十行的数据
root@master:~# awk 'NR>=3 && NR<=10' /etc/passwd
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
# 取出包含bash的行
root@master:~# awk '/bash/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
# 取出包含root和devops的行
root@master:~# awk '/root|devops/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
devops:x:1000:1000::/home/devops:/bin/sh
# 取出文件中指定时间段内的日志
root@master:~# awk '/11:00:00/,/11:10:00/' /acces.log
awk取列
awk中内置变量NF
表示列
示例:
# 取出/etc/hosts文件的第三列、最后一列
root@master:~# awk '{print $3,$NF}' /etc/hosts
localhost
following hosts
ip6-localhost ip6-loopback
ip6-allnodes
ip6-allrouters
iv-ydpkgu0jcwwh2yox8410 iv-ydpkgu0jcwwh2yox8410
# 对齐
root@master:~# awk '{print $3,$NF}' /etc/hosts | column -t
localhost
following hosts
ip6-localhost ip6-loopback
ip6-allnodes
ip6-allrouters
iv-ydpkgu0jcwwh2yox8410 iv-ydpkgu0jcwwh2yox8410
awk取行取列
示例:取出ip a s eth0
的IP地址
root@master:~# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:16:3e:16:5b:ef brd ff:ff:ff:ff:ff:ff
inet 10.3.0.86/20 brd 10.3.15.255 scope global dynamic eth0
valid_lft 310239265sec preferred_lft 310239265sec
inet6 fe80::216:3eff:fe16:5bef/64 scope link
valid_lft forever preferred_lft forever
root@master:~# ip a s eth0 | awk 'NR==3' | awk -F 'inet |/20' '{print $2}'
10.3.0.86
示例:统计free结果中内存空闲率
root@master:~# free | awk 'NR==2{print $NF/$2}'
0.82089
root@master:~# free | awk 'NR==2{print $NF/$2*100"%"}'
82.0729%
awk计算
大多数情况都可以使用awk
进行算数运算,awk
可以进行整数、小数的运算
基础用法示例:
root@master:~$ awk 'BEGIN{print 1/3}'
0.333333
root@master:~$ awk 'BEGIN{print 2*3}'
6
root@master:~$ awk 'BEGIN{print 3+3}'
6
root@master:~$ awk 'BEGIN{print 4-3}'
1
携带变量示例
awk -v
选项用于创建或修改awk中的变量,-v是shell脚本与awk的桥梁
在awk中各种变量直接使用即可,不要加上$,如果加上了会被awk认为是取列
root@master:~$ num1=2
root@master:~$ num2=5
root@master:~$ awk -va1=${num1} -va2=${num2} 'BEGIN{print a1/a2}'
0.4
root@master:~$ awk -va1=${num1} -va2=${num2} 'BEGIN{print a1*a2}'
10
root@master:~$ awk -va1=${num1} -va2=${num2} 'BEGIN{print a1+a2}'
7
root@master:~$ awk -va1=${num1} -va2=${num2} 'BEGIN{print a1-a2}'
-3
Linux四剑客grep、find、sed、awk使用的更多相关文章
- linux四剑客-grep/find/sed/awk/详解-技术流ken
四剑客简介 相信接触过linux的大家应该都学过或者听过四剑客,即sed,grep,find,awk,有人对其望而生畏,有人对其爱不释手.参数太多,变化形式太多,使用超级灵活,让一部分人难以适从继而望 ...
- shell 编程四剑客简介 find sed grep awk(微信公众号摘抄)
一,Shell编程四剑客之Find 通过如上基础语法的学习,读者对Shell编程有了更近一步的理解,Shell编程不再是简单命令的堆积,而是演变成了各种特殊的语句.各种语法.编程工具.各种命令的集合. ...
- Linux 命令之 linux 四剑客
Linux命令-- 四剑客 一:Linux命令 之 AWK 符号:^ 开头 $ 结尾 awk 是一种处理文本的语言,一个强大的文本分析命令! 1:提取文件中的每行的第二个 提取前文本中内容为 命令: ...
- Linux四剑客find/grep/awk/sed
find ./ -name "*txt" -maxdepth 1 -type f -mtime -2 -exec mv {} ./bbb.txt \; 这条命令表示找当前目录(-m ...
- Linux四剑客之awk命令
AWK详解 awk简介 awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母.实际上 AWK 的确拥有自己的语 ...
- linux sed awk seq 正则使用 截取字符 之技巧
[root@room9pc01 ~]# seq 5 1 2 3 4 5 [root@room9pc01 ~]# seq 2 5 2 3 4 5 seq 1 2 10 1 3 5 7 9 [root@d ...
- Shell编程四剑客包括:find、sed、grep、awk
一.Shell编程四剑客之Find Find工具主要用于操作系统文件.目录的查找,其语法参数格式为: find path -option [ -print ] [ -exec -ok command ...
- linux下的文本处理命令sed&awk&grep
Sedsed 是个精简的.非交互式的编辑器.他能执行和编辑vi和emacs相同的编辑任务.sed编辑器不提供交互使用方式:只能在命令行输入编辑命令.指定文件名,然后在屏幕上察看输出.sed编辑器没有破 ...
- awk、grep、sed是linux操作文本的三大利器,也是必须掌握的linux命令之一
awk.grep.sed是linux操作文本的三大利器,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单纯的查找或匹配文 ...
- Linux基础-正则表达式整理---------------grep、sed、awk
目录: Ⅰ:正则表达式 Ⅱ:作业 Ⅰ:正则表达式 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. 在lin ...
随机推荐
- 从零开始构建一个gradle工程
gradle init --type java-application 首先,确保您已经安装了Java和Gradle.您可以从官方网站下载并按照说明进行安装. 创建一个新的项目文件夹,并进入该文件夹. ...
- Kotlin:【定义类】field、计算属性、防态竞争条件
- 玩转云端 | 拥有HBlock这项“存储盘活绝技”,数据中心也能“热辣瘦身”!
夏天马上就要到了,"瘦身"不光是特定人群的需求,也是数据中心的需求.构建轻量化.低碳化.高性价比的新型数据中心,更有效地支撑经济社会数字化转型,已成为业界主流趋势. 如何让数据中心 ...
- hashmap为什么要引入红黑树?
在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里.但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依 ...
- 开源的 DeepSeek-R1「GitHub 热点速览」
春节假期回来,一睁眼全是王炸级的开源模型 DeepSeek-R1! GitHub 地址→github.com/deepseek-ai/DeepSeek-R1 DeepSeek-R1 开源还不到一个月, ...
- RabbitMQ(九)——消息持久化
RabbitMQ系列 RabbitMQ(一)--简介 RabbitMQ(二)--模式类型 RabbitMQ(三)--简单模式 RabbitMQ(四)--工作队列模式 RabbitMQ(五)--发布订阅 ...
- 螺旋原型设计 (Spiral Model SDLC)
螺旋模型介绍 -:该模型描述了软件开发过程.该模型是两种模型的组合,首先是迭代模型和一个SDLC 模型,并将其与循环过程相结合. 该模型考虑了大多数其他模型通常没有注意到的风险.该模型从在一次迭代开始 ...
- autMan奥特曼机器人-实时翻译的用法
一.基本配置 访问并登录百度翻译开放平台:https://api.fanyi.baidu.com/ 进入开发者信息获取 APP ID和密钥,并开通"通用文本翻译"服务 autMan ...
- Typecho浏览统计和热门文章调用插件TePostViews
TePostViews是一款简单的typecho热门文章调用插件,通过该插件可以显示每篇文章的阅读次数,以及调用阅读次数最多或者评论数最多的文章作为热门文章调用,用户可以自由选择调用依据和调用文章的数 ...
- 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
从 Chrome 125 开始,支持了一个全新的 CSS 特性 - Anchor Positioning,翻译过来即是锚点定位. 在之前的文章中,我们较为系统的讲述了这个新特性的使用,感兴趣的可以翻开 ...