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

文本内容处理命令

grep

用来过滤文本内容,以匹配要查询的结果。

-m 数字 匹配几次后停止:

grep -m 1 /root/etc/passwd #查找包含root的行

-v 取反

-i 忽略字符的大小写,默认的,可以不加

-n 显示匹配的行号

-c 统计匹配的行数

-o 仅显示匹配到的字符串

-q 静默模式

-A 数字 after 包含匹配到的行,以及后几行。

-B 数字 包含匹配到的行,以及前几行

-C 数字 包含匹配到的行,以及前后各几行

-w 匹配整个单词

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

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

-r 递归目录,查找文件内容,软连接的内容不包含

-R 递归目录,查找文件内容,包含软连接的内容

复制代码
grep -m \# 匹配\#次后停止
grep -m 1 root /etc/passwd #多个匹配只取第一个

-A \# after, 后\#行
grep -A3 root /etc/passwd #匹配到的行后3行也显示出来
-B \# before, 前\#行
-C \# context, 前后各\#行

grep [] file 默认使用正则表达式来匹配模式
"^......"表示以......开头,"......$"表示以......结尾
"^$"表示空行
ifconfig ens33 |grep -Eo "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+"|head -1
ifconfig ens33 |grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}"|head -1

sort

sort 对文本文件中的数据进行排序

sort -n 将字符串按数值排序

sort -M 将三字符的月份名按月份排序(常用于Linux日志文件每行起始的时间戳)

sort -b 排序时忽略起始的空白字符

sort -r 逆序排序(升序变降序,便于查看目录中哪些文件占用磁盘空间最多)

sort -R 随机排序

sort -f 选项忽略(fold)字符串中的字符大小写

sort -u 选项(独特,unique),合并重复项,即去重

sort -k 排序键从POS1位置开始,到POS2位置结束(如果指定了POS2的话)

sort -t 指定字段分隔符

例:sort -t ':' -k 3 -n /etc/passwd

uniq

uniq 单独使用是对连续重复的行去重

uniq -c 显示每行连续出现的次数

uniq -d 仅显示连续重复过的行

uniq -u 仅显示不曾连续重复的行

cat log|cut -d" " -f1|sort|uniq -c|sort -nr |head 查看访问日志,找出访问前10名的用户

tr

格式:tr [选项]... SET1 [SET2]

SET 是一组字符串,一般都可按照字面含义理解

tr -d 删除

tr -s 压缩

tr -c 用字符集2中的字符替换字符串1中字符集的补集,要求字符集为ASCII。

cut

cut -d (delimiter): 指明分隔符,默认tab

cut -f 想要获取的字段

#: 第#个字段,例如 3

#,#,#:离散的多个字段,例如 1,3,6

#-#:连续的多个字段, 例如 1-6

混合使用:1-3,7

cut -c 取每行第几个字符

cut -b 取每行第几个字符

cut --complement 排除指定的字段

cut --output-delimiter 替换分隔符

例:cut -d ":" -f 1-3 /etc/passwd # 1-3表示1到3

cut -d ":" -f 1,3 /etc/passwd # 1,3表示1和3

cut d ":" -f 1-3 --output-delimiter=" " /etc/passwd # 将":"分隔符替换为"空格"

split

split [-b ][-C ][-l ][要切割的文件][输出文件名前缀][-a ]

split -b<字节> 指定按多少字节进行拆分,也可以指定 k、M、G、T 等单位。

split -<行数>或-l<行数> 指定每多少行要拆分成一个文件。

输出文件名前缀:设置拆分后的文件的名称前缀,没有指定拆分后文件的命名方式的情况下,split 会默认采用 x 字符作为文件前缀,并在前缀后加上编号,默认从 aa 开始。

split -a<后缀长度>:默认的后缀长度是 2,也就是按 aa、ab、ac 这样的格式依次编号。

统计当前主机状态

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

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

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

正则表达式

通配符:用来匹配文件名或者目录名

*:任意一个或多个字符

?:任意的单个字符

匹配任意单个字符

a-z

A-Z

0-9

正则表达式

按照一定的格式和符号来匹配文件内容(命令输出的结果)

正则表达式的格式:

基本正则表达式 grep

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

使用正则表达式,匹配内容最好是用 引号 引起来。

元字符

复制代码
.:任意单个字符
\:表示转义符
[0-9]:匹配文件内容的任意单个数字
[a-z]:匹配文件内容的任意单个小写字母
[A-Z]:匹配文件内容的任意单个大写字母
():分组
[^]:取反
[:alnum:]:字母和数字,等价于**[0-9a-zA-Z]**
[:alpha:]:代表任何英文大小写字符,亦即 [A-Za-z]
[[:lower:]]:小写字母相当于 [a-z]
[[:upper:]]:大写字母相当于 [A-Z]
[[:blank:]]:空白字符(空格和制表符)
[:space:]:包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比 [:blank:] 包含的范围广
[:cntrl:]:不可打印的控制字符(退格、删除、警铃...)
[:digit:]:十进制数字
[:xdigit:]:十六进制数字
[:graph:]:可打印的非空白字符
[:print:]:可打印字符
[:punct:]:标点符号
\w:匹配单词构成部分,等价于**[[:alnum:]]**
\W:匹配非单词构成部分,等价于**[^_[:alnum:]]**
\S:匹配任何非空白字符。等价于 [^ \f\n\r\t\v]
\s:匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [\f\n\r\t\v]

匹配次数

复制代码
*:任意字符,表示匹配前面的任意字符,0次,尽可能多的匹配
.*:匹配任意长度的字符,最少要有一次。也就是匹配所有
?:匹配前面的字符0次或者1次,可有可无
\+:匹配前面的字符,最少出现1次有且>=1
\{n\}:匹配前面的字符等于多少次
\{m,n\}:匹配前面的字符最少m次,最多n次
\{,n\}:匹配前面的最多n次,只要比n小,都算
\{n, \}:匹配前面的字符至少n次,只要比n大,都算
使用拓展正则表达式将"\"去掉即可

位置锚定

复制代码
^:以什么开始
$:以什么结尾
^$:空行(tab或\n)
^root$ :匹配整个单词,且这一行只有这个单词
词首锚定:\b
词尾锚定:\b

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

复制代码
grep -E "sh$" /etc/passwd

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

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

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

复制代码
ifconfig ens33 | grep -Eo "\b[1-9]\b|\b[1-9][0-9]\b|\b1[0-9]{2}\b|\b2[0-4][0-9]\b|\b25[0-5]\b"

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

复制代码
grep -E "bash$" /etc/passwd

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

复制代码
grep -E ".?:.?" /etc/passwd
相关推荐
光路科技14 分钟前
光路科技将携工控四大产品亮相工博会,展示工业自动化新成果
运维·科技·自动化
csdn_aspnet19 分钟前
Linux Node.js 安装及环境配置详细教程
linux·node.js
PAQQ1 小时前
解决 ubuntu 重启串口号变化
linux·运维·ubuntu
dyxal1 小时前
linux系统安装wps
linux·运维·wps
啟明起鸣2 小时前
【网络编程】从与 TCP 服务器的对比中探讨出 UDP 协议服务器的并发方案(C 语言)
服务器·c语言·开发语言·网络·tcp/ip·udp
大家的笔记本2 小时前
jetson orin super nano(arm linux系统)上读取大恒图像工业相机(型号MER-050-560U3C)教程
linux·arm开发·相机
九章云极AladdinEdu2 小时前
深度学习优化器进化史:从SGD到AdamW的原理与选择
linux·服务器·开发语言·网络·人工智能·深度学习·gpu算力
Xxtaoaooo2 小时前
Nginx 502 网关错误:upstream 超时配置的踩坑与优化
运维·nginx·负载均衡·502错误·upstream超时
青草地溪水旁2 小时前
Linux epoll 事件模型终极指南:深入解析 epoll_event 与事件类型
linux·epoll
..过云雨3 小时前
04.【Linux系统编程】基础开发工具2(makefile、进度条程序实现、版本控制器Git、调试器gdb/cgdb的使用)
linux·笔记·学习