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

注意:条件筛选时使用单引号
相关推荐
EMTime2 小时前
Docker运行OpenWRT
运维·docker·容器
lolo大魔王3 小时前
Linux 文件系统超全面详解(原理、结构、挂载、分区、inode、日志、管理命令)
linux·运维·服务器
磊 子4 小时前
详细讲解一下epoll
linux·io·epoll·io多路复用
printfLILEI5 小时前
php中的类与对象以及反序列化
linux·开发语言·php
zyl837215 小时前
Docker 使用手册
运维·docker·容器
古月方枘Fry6 小时前
MGRE实验
运维·服务器
叠叠乐6 小时前
redmi k90 pro max 强解BL,刷海外rom, 并刷入sukisu ultra
linux
stolentime6 小时前
FreeDomain 本地开发环境快速搭建指南
运维·服务器·网络
xiaoye-duck7 小时前
《Linux系统编程》Linux 进程间通信之管道基础解析:从匿名管道原理到基于管道的进程池实现
linux