Linux学习——文本处理工具与正则表达式

目录

一,grep

1,grep介绍

2,grep的常用选项

3,grep使用演示

1,基本使用

直接查找字符串:

使用选项

2,使用正则表达式进行匹配

1,正则表达式介绍

2,使用范例

二,sed

1,sed介绍

2,sed常用选项和指令

3,sed使用实例

1,简单实例

2,综合实例

三,Find

1,find介绍

2,常用选项

​编辑


一,grep

1,grep介绍

grep是Linux上的一个文本搜索工具,是用来查找文本文件内的一些符合grep定义模式的文本文件的。格式:grep [OPTIONS...] PATTERN [FILE...]

2,grep的常用选项

3,grep使用演示

1,基本使用
直接查找字符串:

grep "字符串" 文件

使用选项

只显示第一行

grep "字符串" -m 1 文件

查找并显示行号

grep "字符串" -n 文件

只显示查找到的字符串

grep -o "字符" 文件

剔除查找的内容后显示别的内容

grep -v "字符" 文件

使用多个条件查找字符:满足两个条件之一便可以查找

grep -e "字符" -e "字符"

显示匹配到字符条件的行的行号

grep -c 字符 文件

递归条件搜索

1,不管软连接文件

grep -r 字符 文件

2,管软连接

grep -R 字符 文件

不区分大小写

grep -i 字符串 文件

从文件中读取pattern再匹配

先创建文件:

使用-f选项读取文件的pattern内容进行匹配:

2,使用正则表达式进行匹配
1,正则表达式介绍

正则表达式的使用方式可以再网上查询,也可以使用man 7 regex再Linux上查看。

2,使用范例

分区利用率最大的值

bash 复制代码
df | grep "^/dev/sd"|tr -s " " |cut -d% -f1|cut -d " " -f5|head -1

指令解释:

df:显示显示文件系统资源的信息。

grep "^/dev/sd":将df里面以/dev/sd开头的内容截取出来。

tr -s " ":将重复的空格去掉仅保留一个空格。

cut -d% -f1:以%为分隔符分为左右两边,取-f1表示左边。

cut -d " " -f5:以" "为分隔符取第五个。

head -1:只要最上面的第一行。
哪个IP和当前主机连接数最多

bash 复制代码
ss -nt |grep "^ESTAB"|tr -s " "|cut -d " " -f5|cut -d : -f1

指令解释:

  1. ss -nt

    • ss 是一个用于检查套接字的工具,它可以显示类似于 netstat 的信息,但比 netstat 更快。
    • -n 选项表示以数字形式显示地址和端口号,不尝试解析服务名称。
    • -t 选项指定只显示TCP连接。
  2. |(管道):这个符号用于将前一个命令的输出作为后一个命令的输入。

  3. grep "^ESTAB"

    • grep 是一个强大的文本搜索工具。
    • "^ESTAB" 是一个正则表达式,匹配以"ESTAB"开头的行。这里实际上是匹配"ESTABLISHED"状态的连接,但假设是为了简化而只写了"ESTAB"的一部分。然而,注意这样可能不准确匹配到所有ESTABLISHED状态的行,因为完整的状态通常是"ESTABLISHED"。正确的正则表达式应该是"^ESTABLISHED"
  4. tr -s " "

    • tr 是一个用于转换或删除字符的工具。
    • -s 选项表示压缩序列中的重复字符,但在这个命令中,它实际上对空格进行压缩,因为指定了" "(一个空格)作为要压缩的字符。然而,由于grep的输出通常不包含连续的空格,这个选项可能在这个具体命令中并不必要。
  5. cut -d " " -f5

    • cut 是一个用于按列提取文本的工具。
    • -d " " 指定空格作为字段分隔符。
    • -f5 表示提取第五个字段。在ss -nt的输出中,第五个字段通常是本地地址和端口(例如,192.168.1.1:80)。
  6. cut -d : -f1

    • 这个cut命令再次使用,但这次是以:作为字段分隔符。
  • -f1 表示提取第一个字段,即IP地址部分
    连接状态的统计
bash 复制代码
ss -nat|grep -v "^State"|cut -d " " -f1|sort -u

指令解释:

ss -nat:将所有的tcp连接以数字的方式显示出来。

grep -v "^State":不显示以State开头的行。

cut -d " " -f1:以空格为分隔符并取第一列。

sort -u:排序并去掉重复的状态。

过滤掉文件的注释(包括#号的行)和空行

bash 复制代码
 grep -v "^#|$" /etc/passwd

二,sed

1,sed介绍

sed也是一个文本处理工具,特点是可以一行一行的读取文件内容并处理。相比于vim等文本编辑器更加高效。

格式:sed [OPTION]... {script-only-if-no-other-script} [input-file]...

2,sed常用选项和指令

3,sed使用实例

1,简单实例

打印文件内容

sed 'p' 文件

仅显示与查找匹配的内容

sed -n '/字符串/p' 文件

只打印第一行的内容

sed -n '1p' 文件

sed给每一行后面加上空格

sed 'G' 文件

2,综合实例

删除每行的第二个字符

bash 复制代码
sed -r 's/(.)(.)(.*)/\1\3/' test.txt

代码解释:

-r:使用扩展模式

s:启用搜索功能

(.)(.)(.*):匹配的字符模式,每一个括号代表一个匹配组。

\1\3:代表显示第一个和第三个捕获组的内容。

删除第二个单词

bash 复制代码
sed -r 's/^([a-zA-Z]+[^a-zA-Z]+)[a-zA-Z]/\1/' test.txt 

解释

  • sed -r:使用 sed 的扩展正则表达式模式。
  • 's/^([a-Z]+[^a-Z]+)[a-Z]+/\1/g':这是一个替换命令,其结构为 s/pattern/replacement/flags
    • ^:匹配行的开始。
    • ([a-Z]+[^a-Z]+):这是一个捕获组,但其中的正则表达式可能不是您想要的。
      • [a-Z]+:匹配一个或多个字母(注意:[a-Z] 实际上可能不是所有 sed 实现都支持的,因为标准 ASCII 字符集中没有 Za 的范围,但这里可能是想表达 [a-zA-Z] 的意思,即匹配任何大小写字母)。
      • [^a-Z]+:紧接着尝试匹配一个或多个非字母字符,但由于前面的 [a-Z]+ 已经消耗了尽可能多的字母,这个部分可能永远不会被匹配到(除非输入字符串以非字母字符开头,但这与 ^ 冲突)。
    • [a-Z]+:这部分尝试匹配行中紧接着前面部分的又一个或多个字母,但由于前面的正则表达式可能存在的问题,这部分的匹配也可能不是你预期的。
    • \1:在替换文本中,\1 引用第一个捕获组的内容。

三,Find

1,find介绍

find是一个文件搜索工具,可以实时的查找文件。

2,常用选项

在使用find时可以指定文件路径进行查找。

指定在根目录下查找 :

bash 复制代码
sudo find /  -name passwd
相关推荐
筱源源16 分钟前
Kafka-linux环境部署
linux·kafka
Mephisto.java33 分钟前
【大数据学习 | kafka高级部分】kafka中的选举机制
大数据·学习·kafka
算法与编程之美1 小时前
文件的写入与读取
linux·运维·服务器
南宫生1 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
xianwu5431 小时前
反向代理模块
linux·开发语言·网络·git
Amelio_Ming1 小时前
Permissions 0755 for ‘/etc/ssh/ssh_host_rsa_key‘ are too open.问题解决
linux·运维·ssh
武子康2 小时前
大数据-212 数据挖掘 机器学习理论 - 无监督学习算法 KMeans 基本原理 簇内误差平方和
大数据·人工智能·学习·算法·机器学习·数据挖掘
Ven%2 小时前
centos查看硬盘资源使用情况命令大全
linux·运维·centos
使者大牙2 小时前
【大语言模型学习笔记】第一篇:LLM大规模语言模型介绍
笔记·学习·语言模型
疯一样的码农3 小时前
Python 正则表达式(RegEx)
开发语言·python·正则表达式