Linux之文本三剑客

Linux之三剑客

Linux的三个命令,主要是用来处理文本,grep,sed,awk,处理日志的时候使用的非常多

1 grep

对文本的内容进行查找

1) 基础用法

shell 复制代码
语法
grep 选项 内容|正则表达式 文件

选项:
-i  不区分大小写
-v  排除,反选
-n  显示行号
-c  统计个数


查看文件里包含有的内容
[root@localhost opt]# grep 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

查看内容不区分大小写
[root@localhost home]# grep -i 'root' a.txt 
root
ROOT

查看内容不包含有root
[root@localhost home]# grep -v 'root' a.txt 
ROOT
asdsad
43543543
/'.;.'

查询root显示行号
[root@localhost home]# grep -n 'root' a.txt 
1:root
6:root

查看包含有root行的个数
[root@localhost home]# grep -c 'root' a.txt 
2

2) 正则表达式

  • 基础正则表达式
正则表达式 作用
^ 以xxx开头
$ 以xxx结尾
^$ 匹配空行
. 任意一个字符
\ 转义字符
* 前面的字符出现0-n次
.* 匹配所有字符
\[\] 只能是\[\]里的字符中任意一个
\^ 非\[\]里的字符
  • 拓展正则表达式

egrep '拓展正则' 文件名

正则表达式 作用
|
+ 前面的字符出现1-n次
? 前面的字符出现0次或1次
() 把括号里的内容整体匹配
{m,n} 前面的字符至少出现m次,最多出现n次
  • perl正则

grep -P 'perl正则' 文件名

正则表达式 作用
\d 所有的数字
\s 空白字符
\w 数字字母_

案例

复制代码
查看/etc/sysconfig/selinux里不包含空行和注释信息

[root@localhost home]# egrep -v '^$|#' /etc/sysconfig/selinux 
SELINUX=disabled
SELINUXTYPE=targeted

2 sed

1) 概述

sed(Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行。

2) 语法

复制代码
sed 选项 操作 文件

3) 查看

复制代码
查看所有内容
sed -n 'p' 文件名

查看第3行内容
sed -n '3p' 文件名

查看第3-5行内容
sed -n '3,5p' 文件名

查看偶数行内容
sed -n 'n;p' 文件名

查看奇数行内容
sed -n 'p;n' 文件名

查看包含有root内容的行
sed -n '/root/p' 文件名

查看包含有a至包含有b的所有内容行
sed -n '/a/,/b/p' 文件名

案例:查看tomcat日志中的2023年6月1日的日志

复制代码
[root@localhost opt]# sed -n '/2023-06-15/p' logsp2p.log

4) 运行过程

5) 新增

a:往指定的行下追加内容

复制代码
sed '3a 内容' 文件名 

c:往指定的行替换成新的内容

复制代码
sed '3c 内容' 文件名 

i:往指定的行前插入内容

复制代码
sed '3i 88 aaaaaaaaa' a.txt

如果想要修改源文件需要在选项使用-i

shell 复制代码
sed -i '3i 88 aaaaaaaaa' a.txt


[root@localhost home]# cat a.txt 
1 asdsadsadsa
2 asdasdsafdg
88 aaaaaaaaa
3 trytuytuyt
4 jhlkjlklj
5 32r3r43t
6 gjuku
7 gjukiuk
8 kiulkiul
9 wdewfew

6) 删除

shell 复制代码
删除指定的行
[root@localhost home]# sed '3d' a.txt 
1 asdsadsadsa
2 asdasdsafdg
4 jhlkjlklj
5 32r3r43t
6 gjuku
7 gjukiuk
8 kiulkiul
9 wdewfew

删除包含有内容的行
sed '/内容/d' 文件名

[root@localhost home]# sed '/1/d' a.txt 
2 asdasdsafdg
3 trytuytuyt
4 jhlkjlklj
5 32r3r43t
6 gjuku
7 gjukiuk
8 kiulkiul
9 wdewfew

[root@localhost home]# sed '/1/,/6/d' a.txt 
7 gjukiuk
8 kiulkiul
9 wdewfew

3 awk

取文本的行或列内容

语法

shell 复制代码
awk [-F '指定字符'] "{print 列|行}" 文件名
-F省略不写的时候.默认是以空白字符拆分


取列
awk '{print $0}' a.txt   以空白字符拆分  取列
$0 所有的列
$1 取第一列
$2 取第二列
......
$NF 取最后一列
$(NF-1) 取倒数第二列


取行
awk 'NR==行数' 文件名
NR 当前处理的行号

取1-6行
awk 'NR>=1 && NR<=6' 文件名        
&& 且          || 或


取行列
awk -F ':' '$3>=500{print$3}' 文件名


awk -F ':' '{print $3}' /etc/passwd | awk '$0>=500'

[root@localhost home]# awk -F ':' '$3>=500{print $3}' /etc/passwd
999
998

注意:条件筛选时使用单引号
相关推荐
寒水馨4 分钟前
Linux下载、安装 Codex CLI(附安装包codex-x86_64-unknown-linux-musl.tar.gz)
linux·openai·终端·ai编程·codex·智能体·codex cli
其实防守也摸鱼24 分钟前
KMP全栈开发:从Android到AI Agent的技术演进与实践
android·运维·网络·人工智能·学习·安全·macos
冰封之寂9 小时前
Docker 资源管理终极指南:CPU、内存与 IO 的精细化控制
linux·运维·服务器·docker·云计算
xiaoye-duck9 小时前
《Linux系统编程》Linux 系统多线程(五):<线程同步与互斥>线程互斥(上):从条件变量到生产者消费者模型详解
linux·线程
小柯南敲键盘10 小时前
图片翻译API接入与自动化实现指南
运维·python·自动化
9523611 小时前
Docker - 基础
运维·后端·docker·容器
Promise微笑11 小时前
智能激光清障仪选型指南:高效运维与安全保障的关键考量
运维·安全
Code_Ignis11 小时前
docker国内可用源(持续维护)
运维·docker·容器
一叶龙洲11 小时前
向日葵远程Ubuntu,支持隐私屏
linux·运维·ubuntu
酷可达拉斯11 小时前
Linux操作系统-shell编程之Grep与正则表达式
linux·运维·服务器·正则表达式·centos