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

注意:条件筛选时使用单引号
相关推荐
ajassi200019 分钟前
开源 python 应用 开发(三)python语法介绍
linux·python·开源·自动化
o不ok!24 分钟前
Linux面试问题-软件测试
linux·运维·服务器
DaxiaLeeSuper1 小时前
Prometheus+Grafana+node_exporter监控linux服务器资源的方案
linux·grafana·prometheus
尽兴-2 小时前
如何将多个.sql文件合并成一个:Windows和Linux/Mac详细指南
linux·数据库·windows·sql·macos
kfepiza2 小时前
Netplan 中 bridges、bonds、ethernets、vlans 之间的关系 笔记250711
linux·tcp/ip·shell
小小不董2 小时前
深入理解oracle ADG和RAC
linux·服务器·数据库·oracle·dba
宇钶宇夕3 小时前
SIMATIC S7-1200的以太网通信能力:协议与资源详细解析
运维·服务器·数据库·程序人生·自动化
杰夫贾维斯3 小时前
CentOS Linux 8 的系统部署 Qwen2.5-7B -Instruct-AWQ
linux·运维·人工智能·机器学习·centos
kfepiza4 小时前
Netplan 配置网桥(Bridge)的模板笔记250711
linux·tcp/ip·ubuntu