处理文本内容的命令和正则表达式

news2024/10/22 19:24:35

处理文本内容的命令

正则表达式匹配的是文本内容,linux的文本三剑客 都是针对文本内容

文本三剑客:

grep 过滤文本内容

sed 针对文本内容进行增删改查

awk 按行取列

文本三剑客都是按行进行匹配。

grep

grep的作用就是使用正则表达式来匹配文本内容。

选项:

-m 匹配几次之后停止

[root@localhost opt]# grep -m 1 root /etc/passwd
root:x:0:0:root:/root:/bin/bash

-v 取反

[root@localhost opt]# cat /opt/123.txt 
qwe
123
aaa
bbb
ccc
[root@localhost opt]# grep -v 123 /opt//123.txt 
qwe
aaa
bbb
ccc

-n 显示匹配的行号

[root@localhost opt]# grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

-c 只统计匹配的行数

[root@localhost opt]# grep -c root /etc/passwd
2

-o 仅显示匹配的结果

[root@localhost opt]# grep -o root /etc/passwd
root
root
root
root

-q 静默模式。不输出任何信息

[root@localhost opt]# grep -q root /etc/passwd
[root@localhost opt]# 

-A 数字 后几行

[root@localhost opt]# grep -A 3 root /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
--
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin

-B 数字 前几行

-C 数字 前后各几行

-e 或者

-E 匹配扩展正则表达式

-f 匹配两个文件相同的内容,以第一个文件为准

[root@localhost opt]# vim 123.txt
qwe 123 aaa bbb ccc
[root@localhost opt]# vim 456.txt
123 qwe ddd ccc
[root@localhost opt]# grep -f 123.txt 456.txt 
123
qwe
ccc

-r 递归目录 目录下的文件内容。软连接不包含在内

-R 递归目录 目录下的文件内容。包含软连接。

[root@localhost opt]# grep -r qwe /opt
/opt/dec/123.txt:qwe
/opt/123.txt:qwe
/opt/456.txt:qwe
[root@localhost opt]# grep -R qwe /opt
/opt/dec/123.txt:qwe
/opt/123.txt:qwe
/opt/999.txt:qwe
/opt/456.txt:qwe

排序:

sort

sort

以行为单位,对文件的内容进行排序

sort 选项 参数

cat file | sort 选项

-f 忽略大小写,默认会把大写字母排在前面

-b 忽略每行之前的空格

-n 按照数字进行排序

-r 反向排序

-u 相同的数据仅显示一行

-o 把排序后的结构转存到指定的文件

uniq

uniq 去除连续重复的行,只显示一行

-c 统计连续重复的行的次数,合并连续重复的行

-u 显示仅出现一次的行(包括不是连续出现的重复行)

-d 仅显示连续重复的行(不包括非连续出现的内容)

tr 用来对标准输出的字符进行替换,压缩和删除。

tr 选项 参数

-c 保留字符集1的字符,其他的字符用字符集2来进行替换

-d 删除字符集中的一部分

-s 把字符集1的部分替换成字符集2的部分 连续重复出现的字符串压缩成一个字符

cut

cut和awk 都可以按行取列。

cut 快速裁剪

-d 指定分隔符(默认的分割符是tab键)

-f 对字段进行截取,指定输出段的内容

-complement 输出的时候排除指定的字段

-output-delimiter 更改输出内容的分割符

[root@localhost ~]# head -n 1 /etc/passwd | cut -d ':' -f 1-5 --output-delimiter=' '
root x 0 0 root

-b 以字节为单位进行截取

-c 以字符为单位进行截取

文件的拆分:split

split 大文件拆分成若干小的文件

-l 按行来进行分割

-b 按照大小来进行分割

面试题:

现在有一个日志文件,很大,5G,第一个能不能快速的打开?

第一个方法:拆分 -l 按行 -b 大小

这种文件推荐使用按大小。

文件合并:

cat

paste

面试题:

cat合并和paste合并之间有什么区别

cat是上下合并

paste是左右合并

面试题:

统计当前主机的连接状态:

[root@localhost opt]# ss -antp | grep -v '^State' | cut -d ' ' -f 1 |  sort | uniq -c
      1 ESTAB
     13 LISTEN

正则表达式:

正则表达式:由一类特殊字符以及文本字符所编写的一个模式,模式又来匹配文件当中的内容(字符)。

效验我们输入的内容是否满足规定,格式,长度等等要求。

主要用来匹配文本内容,命令的结果。

通配符:只能用于匹配文件名和目录名,不能匹配文件内容和命令结构。

正则表达式:

基本正则表达式:

元字符(字符匹配)

. 任意单个字符,也可以是一个汉字

\ 转义符 恢复其本意

[] 匹配指定范围内的任意单个字符或者数字

[^] 取反

^# 以#为开头

^$ 表示空行

匹配字符出现的次数:

* 匹配前面的字符任意次,0次也可以。贪婪模式,尽可能的匹配。

.* 匹配前面的任意字符,至少要有一次。匹配所有。

\? 匹配前面的字符0次或者1次,可有可无。

\+ 匹配前面的字符只少出现一次

\{n\} 匹配前面的字符=n次,可以小于n,但是不能大于n,而且前面的字符必须要是连续出现

\{m,n\}匹配前面的字符至少m次,至多n次。必须是连续出现,超出的不在匹配范围。

位置锚定:

^:以什么为开头,行首锚定

$:以什么为结尾,行尾锚定

[root@localhost opt]# cat -n test1.txt 
     1  13770325194
     2  13131301010
     3  111111111111
     4  aaacvvaada
     5  rootroot
     6  root
     7  rootrootroot
[root@localhost opt]# cat test1.txt | grep -n "^root$"     #这一行只能有root
6:root

\< 或者 \b 词首锚定,匹配单词的左侧(连续的数字,字母。下划线都算单词内部)

\> 或者 \b 词尾锚定 用于匹配单词的右侧

\broot\b 匹配整个单词。空格隔开的也算整个单词

^root$ 整行只有这一个单词

区别

分组和逻辑关系

分组()

或者 \|

扩展正则表达式:

grep -E

元字符(字符匹配)

. 任意单个字符,也可以是一个汉字

\ 转义符 恢复其本意

[] 匹配指定范围内的任意单个字符或者数字

[^] 取反

^# 以#为开头

^$ 表示空行

匹配字符出现的次数:

* 匹配前面的字符任意次,0次也可以。贪婪模式,尽可能的匹配。

.* 匹配前面的任意字符,至少要有一次。匹配所有。

? 匹配前面的字符0次或者1次,可有可无。

* 匹配前面的字符只少出现一次

{n} 匹配前面的字符=n次,可以小于n,但是不能大于n,而且前面的字符必须要是连续出现

{m,n}匹配前面的字符至少m次,至多n次。必须是连续出现,超出的不在匹配范围。

位置锚定:

^:以什么为开头,行首锚定

$:以什么为结尾,行尾锚定

[root@localhost opt]# cat -n test1.txt 
     1  13770325194
     2  13131301010
     3  111111111111
     4  aaacvvaada
     5  rootroot
     6  root
     7  rootrootroot
[root@localhost opt]# cat test1.txt | grep -n "^root$"     #这一行只能有root
6:root

\< 或者 \b 词首锚定,匹配单词的左侧(连续的数字,字母。下划线都算单词内部)

\> 或者 \b 词尾锚定 用于匹配单词的右侧

\broot\b 匹配整个单词。空格隔开的也算整个单词

^root$ 整行只有这一个单词

区别

分组和逻辑关系

分组()

或者 |

grep -E

egrep

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1844319.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

档案数字化建设要点

目前&#xff0c;档案信息数字化的现状是档案标准化、规范化滞后和应用软件多乱&#xff0c;这些都严重影响了系统整体水平的提高。档案信息自动化的内涵包括档案工作的各个方面和各个环节&#xff0c;其中首要的是档案业务要规范&#xff0c;档案标准要建立健全和真正实施。档…

【Python高级编程】Pickle实现AI算法训练的权重数据的保存

任务描述 代码实现 import pickle import time import os import numpy as np# 模拟耗时的权重计算过程 def calculate_weights():print("开始计算权重...")time.sleep(5) # 模拟耗时操作&#xff0c;暂停5秒以模拟计算过程weights np.random.rand(10, 10) # 随机…

RealityCheck™电机监测和预测性维护模型

RealityCheck™电机 一个附加的软件工具箱&#xff0c;可实现条件监测和预测性维护功能&#xff0c;而无需依赖额外的传感器。相反&#xff0c;它使用来自电机控制过程的电子信息作为振动和其他传感器的代理。凭借其先进的信号处理和机器学习(ML)模型&#xff0c;RealityCheck …

[AIGC] 使用Google的Guava库中的Lists工具类:常见用法详解

在Java程序设计中&#xff0c;集合是我们最常用的数据结构之一。为了方便我们操作集合&#xff0c;Google的Guava库提供了一个名为Lists的工具类&#xff0c;它封装了许多用于操作List对象的实用方法。在本文中&#xff0c;我们将详细介绍其常见的用法&#xff0c;以帮助您更好…

S级猫主食冻干测评出来了:希喂、K9、朗诺实测分享

对于许多宠物主人来说&#xff0c;一到挑选主食冻干就头疼。尽管主食冻干为猫咪带来的益处远超过普通猫粮&#xff0c;但其价格也相对较高。因此&#xff0c;许多宠物主人担心高价购买的主食冻干营养价值并不高。实际上&#xff0c;除了营养&#xff0c;安全性和配方也是选购时…

【课程系列04】某客时间AI大模型应用开发实战营

网盘链接 https://pan.baidu.com/s/1blR1eIMDIIp6AbxU4YaK9w 课程收获 "AI大模型应用开发实战营"是一个为期八周的在线课程&#xff0c;旨在教授学员如何开发和应用AI大模型。课程内容从基础理论到实际应用&#xff0c;逐步深入&#xff0c;覆盖了以下要点&#x…

推荐一个大佬们都在用的IDE主题-Dracula Theme

Dracula主题 对于颜色的主题&#xff0c;每个人的喜欢都有所区别&#xff0c;我喜欢Dracula主题&#xff0c;基本IDE编辑器能配置的都会配置这个主题颜色。然后偶然有一天我发现这个网站&#xff1a;https://draculatheme.com/。才发现Dracula不再仅仅只是个主题了&#xff0c…

有了它,再也不用为客户管理而烦恼

在竞争激烈的市场环境中&#xff0c;有效的客户关系管理&#xff08;CRM&#xff09;系统是企业获取商机、提高成单效率的关键。搭贝CRM管理系统是基于市场业务需求量身定制的&#xff0c;通过记录客户360度画像和跟进信息&#xff0c;实现客户管理的精细化和高效流转。 &#…

Linux:文件描述符

文件描述符实际上就是一个小整数 0 & 1 & 2 Linux进程默认情况下会有3个缺省打开的文件描述符&#xff0c;分别是标准输入0&#xff0c; 标准输出1&#xff0c; 标准错误2. 0,1,2对应的物理设备一般是&#xff1a;键盘&#xff0c;显示器&#xff0c;显示器 所以输入输…

为电脑小白推荐的5款实用工具软件

​ 电脑上的各类软件有很多&#xff0c;除了那些常见的大众化软件&#xff0c;还有很多不为人知的小众软件&#xff0c;专注于实用功能&#xff0c;简洁干净、功能强悍。 1.磁盘空间分析——TreeSize Free ​ TreeSize Free是一款免费的磁盘空间分析工具&#xff0c;能够扫描…

深度学习模型训练中 学习率参数 设置大小问题及设置合适值

&#x1f4aa; 专业从事且热爱图像处理&#xff0c;图像处理专栏更新如下&#x1f447;&#xff1a; &#x1f4dd;《图像去噪》 &#x1f4dd;《超分辨率重建》 &#x1f4dd;《语义分割》 &#x1f4dd;《风格迁移》 &#x1f4dd;《目标检测》 &#x1f4dd;《暗光增强》 &a…

对30年国债利率破2.5%的复盘反思

短期看&#xff0c;以月为维度&#xff0c;长端和超长端利率依然具有较强的向下突破的惯性&#xff1b;中期看&#xff0c;以季为维度&#xff0c;长端依然面临向下赔率不足的约束&#xff0c;但调整需要多重利空共振的契机。 短期看多&#xff0c;逢高配置”的四点逻辑 逻辑一…

SpringBoot:SpringBoot集成Druid监控慢SQL

一、前言 数据库连接池是一个至关重要的组成部分&#xff0c;一个优秀的数据库连接池可以显著提高应用程序的性能和可伸缩性。常见的连接池&#xff1a;Druid、HikariCP、C3P0、DBCP等等&#xff0c;不过目前大部分都是使用Druid或者SpringBoot默认的HikariCP&#xff01; 本文…

计算机网络 交换机的基本配置

一、理论知识 1.三种模式&#xff1a; ①用户模式&#xff1a;当登录路由器后&#xff0c;系统自动进入用户EXEC命令模式。 例如&#xff1a; Router> 在用户模式状态下&#xff0c;用户只能查看路由器的连接状态和基本信息&#xff0c;访问其他网络和主机&#xff0c…

lombok常用注解使用与原理

什么是lombok 一个优秀的Java代码库&#xff0c;简化了Java的编码&#xff0c;为Java代码的精简提供了一种方式 使用方法&#xff1a;pom文件中引入依赖 <!--scope&#xff1a;provided&#xff0c;只在编译阶段生效&#xff0c;不需要打入包中--> <dependency>…

AI 编译器技术分享会:上海交大/中科院计算所/微软亚研/智源,他们来了!

4 场 Meetup、3 个城市、19 位嘉宾、1k 行业从业者、累计 100w 曝光&#xff0c; 2023 年 AI 编译器社区小小刷新了一下存在感&#xff0c;我们在非常细分的领域里找到了最为垂直的开发者和工程师&#xff0c;从 0 到 1 建立起一个个小据点&#xff0c;搭建交流平台、促成企内合…

求最小生成树的新算法

不管 prim 算法还是 kruskal 算法都基于 “当前可见最短边” 作贪心策略&#xff0c;但这并不适合分布式并行操作&#xff0c;比方说所有节点一起构建最小生成树&#xff0c;这些算法都显得同步开销过大&#xff0c;甚至导出错误的结果。 最近研究并构建最大流多路径传输协议的…

韩顺平0基础学Java——第27天

p548-568 明天开始坦克大战 Entry 昨天没搞明白的Map、Entry、EntrySet&#xff1a;//GPT教的 Map 和 Entry 的关系 1.Map 接口&#xff1a;它定义了一些方法来操作键值对集合。常用的实现类有 HashMap、TreeMap 等。 2. Entry接口&#xff1a;Entry 是 Map 接口的一个嵌…

【高等数学】傅里叶级数

最近刷了会抖音&#xff0c;看到一个非常有趣的现象&#xff1a;傅里叶级数&#xff0c;今天挑了几个视频来供大家学习。 1.傅里叶级数概念 【小崔说数】傅里叶级数专题https://www.bilibili.com/video/BV1Uq4y1q7xk?t117.4 2.傅里叶级数动画 【谜之舒适】12分钟的傅立叶级…

编译原理:语法分析(语法制导翻译)、语义分析(类型检查、中间代码生成)

编译器在做语法分析的过程中&#xff0c;除了回答程序代码的语法是否合法&#xff08;LL,LR能否接收&#xff09;外&#xff0c;还需要完成后续的工作&#xff08;包括构建语法树、类型检查、中间代码生成、目标代码生成&#xff09;&#xff0c;这些后续工作一般都可以通过语法…