正则表达式

文本处理工具

sort 命令

sort命令:按行对文件的内容进行排序,也可以根据不同的数据类型进行排序

命令 含义
-f 忽略大小写
-b 忽略每行前面的空格
-n 按照数字进行排序
-u 表示去重,相同的数据和仅显示一行
-o 输出的文件名 把sort排序后的结果输出到指定的文件

uniq命令

uniq去重:用于同级或者忽略文件中连续出现的重复行,一般和sort结合使用

语法:uniq 选项 文件名

选项 含义
-c 统计连续重复的行的次数,并且合并重复的行
-u 显示仅出现一次的行(包括不连续出现的重复行)
-d 仅显示重复出现的行(必须是连续的重复行)

tr命令

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

语法:tr 选项 参数

选项 含义
-c 保留字符集1的字符,用其他字符来替换字符集2
-d 删除属于字符集1的字符
-s 将重复出现的字符串压缩成一个,用字符集2替换字符集1
-t 替换字符集,默认的,可以不加

cut命令

cut:截取,对字段进行截取和裁剪

语法:cut 选项 参数

选项 含义
-d 指定分隔符(默认分隔符是tab)
-f 指定要截取的字段
-b 以字符的单位进行截取
-c 以字符的单位进行截取
--complement 排除指定的字段
-output-delimiter 更改输入内容的分隔符

面试题:文件合并的方法是什么,区别是什么?

cat 1 2 > 3 上下合并

paste 1 2 > 3 左右合并

split 命令

split:文件拆分

选项 含义
-l 按行分割
-b 按文件大小分割

正则表达式

基本正则表达式

基本正则表达式 grep

使用正则表达式,匹配内容最好使用引号引起来,避免出现歧义

元字符:

元字符 含义
. 任意单个字符
\ 转义符
0-9 匹配文件内容的任意单个数字
a-z 匹配文件内容的任意单个小写字母
A-Z 匹配文件内容的任意单个大写字母
\[:blank:] 空白字符,空格
() 分组
\^ 取反

表示次数

表示次数 含义
* 任意字符,表示匹配前面的任意字符,0次,尽可能多的匹配
.* 匹配任意长度的字符,最少要有一个,也就是匹配所有
? 匹配前面的字符0次或者1次,可有可无
\ + 匹配前面的字符,最少出现1次,有且>=1
\ {n \} 匹配前面的字符等于多少次
\ {m,n\} 匹配前面的字符最少m次,最多n次
\ {,n \} 匹配前面的字符最多n次,只要比n小,都算
\ {n, \} 匹配前面的字符最少n次,只要比n大,都算

位置锚定

符号 含义
^ 以什么开头
$ 以什么结尾
^$ 空格

^root$:以root开头和结尾的,那一行只能有这一个单词

词首锚定和词尾锚定:\b

分组:()

逻辑或符号:|

扩展正则

扩展正则表达式 grep -E=egrep

扩展正则的元字符和基本正则一样

表示次数

表示次数 含义
* 任意字符,表示匹配前面的任意字符,0次,尽可能多的匹配
.* 匹配任意长度的字符,最少要有一个,也就是匹配所有
? 匹配前面的字符0次或者1次,可有可无
+ 匹配前面的字符,最少出现1次,有且>=1
{n } 匹配前面的字符等于多少次
{m,n} 匹配前面的字符最少m次,最多n次
{,n } 匹配前面的字符最多n次,只要比n小,都算
{n, } 匹配前面的字符最少n次,只要比n大,都算

练习

统计当前主机的连接状态

c 复制代码
ss -antp | grep -v '^State' | cut -d ' ' -f 1 | sort | uniq -c

统计nginx的访问日志当中多次出现的IP地址:

c 复制代码
cat  /var/log/nginx/access.log   |  cut  -d   ""  -f  1 | sort  |  uniq  -c

显示/etc/passwd中以sh结尾的行

c 复制代码
grep "sh$" /etc/passwd

查找/etc/inittab中含有"以s开头,并以d结尾的单词"模式的行

c 复制代码
grep -E "\bs[a-z]+d\b" /etc/inittab

查找ifconfig命令结果中的1-255之间的整数

c 复制代码
ifconfig ens33 | grep -Eo "\b([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\b"

在/etc/passwd中取出默认shell为bash的行

c 复制代码
grep -E "[bash]{4}$" /etc/passwd

高亮显示passwd文件中冒号,及其两侧的字符

c 复制代码
grep -E "[a-zA-Z0-9,/]:+[a-zA-Z0-9,/]|:[0-9a-zA-Z/]" /etc/passwd
相关推荐
START_GAME4 分钟前
MSSQL$SQL2016
java·服务器·前端
ydd1001009 分钟前
字符串转换整数
java
会编程的吕洞宾39 分钟前
DeepAgents In Action学习(Second)
android·java·学习
梦梦代码精1 小时前
基于UniApp+Vue3+ThinkPHP 8,这套知识付费系统的架构设计有点东西
java·低代码·docker·uni-app·开源·php
Code额1 小时前
Python 连接 DeepSeek API,OpenAI
开发语言·python·ai·ai编程
-凌凌漆-1 小时前
【freertos】Task创建(v2)
java·开发语言·算法
牛油果子哥q1 小时前
C++内存模型与深浅拷贝万字详解:栈堆静态内存布局、深浅拷贝底层差异、内存泄漏根治、拷贝崩溃踩坑、手写深拷贝实战
java·开发语言·c++
曹牧1 小时前
C#:函数参数指定默认值
开发语言·c#
AAA@峥2 小时前
Python 基础开篇:认识 Python、版本选择、环境部署与首个 HelloWorld
开发语言·python
caimouse3 小时前
ReactOS 图形系统分析(47):GDI 批处理 — gdibatch.c
c语言·开发语言