五、文本处理工具+正则表达式

一、文本查看工具

1. cat

  • 功能:将文件所有内容输出到屏幕

  • 用途:读取文件、合并多个文件为一个新文件

  • 注意:不适合大文件(会一次性全部输出)

  • 扩展:用cat快速生成文件

  • 常用选项

  • -n:显示行号

  • -A:显示全部及隐藏符号

示例: cat 文件

复制代码
[root@localhost /]# cat /etc/passwd
#打印/etc/passwd文件内容

**示例:**查看多文件

复制代码
[root@localhost ~]# ls
aa.txt  bb.txt
[root@localhost ~]# cat aa.txt  bb.txt
这是aa.txt文件的内容
这是bb.txt文件的内容
[root@localhost ~]#

示例:合并文件内容

复制代码
[root@localhost ~]# cat aa.txt >>bb.txt
[root@localhost ~]# cat aa.txt  bb.txt
这是aa.txt文件的内容
这是bb.txt文件的内容
这是aa.txt文件的内容
[root@localhost ~]# cat bb.txt
这是bb.txt文件的内容
这是aa.txt文件的内容
[root@localhost ~]#

**示例:**查看文件数及行号

复制代码
[root@localhost ~]# ls
aa.txt  bb.txt
[root@localhost ~]# ls |cat -n
     1  aa.txt
     2  bb.txt
[root@localhost ~]# cat -n /etc/passwd
     1  root:x:0:0:Super User:/root:/bin/bash
     2  nobody:x:65534:65534:Kernel Overflow User:/:/usr/sbin/nologin
     3  chrony:x:985:985:chrony system user:/var/lib/chrony:/sbin/nologin
     4  clevis:x:986:986:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/usr/sbin/nologin
     5  cockpit-wsinstance:x:989:989:User for cockpit-ws instances:/:/usr/sbin/nologin
     6  dbus:x:81:81:System Message Bus:/:/usr/sbin/nologin
     7  nscd:x:28:28:NSCD Daemon:/:/usr/sbin/nologin
     8  sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/usr/sbin/nologin
     9  setroubleshoot:x:987:987:SELinux troubleshoot server:/var/lib/setroubleshoot:/usr/sbin/nologin
    10  systemd-coredump:x:997:997:systemd Core Dumper:/:/usr/sbin/nologin
    11  tss:x:59:59:Account used for TPM access:/:/usr/sbin/nologin
[root@localhost ~]#

示例:cat -A

跨操作系统的时候可以查看是否含有隐藏符号

复制代码
[root@localhost ~]# cat -A /etc/passwd
root:x:0:0:Super User:/root:/bin/bash$
nobody:x:65534:65534:Kernel Overflow User:/:/usr/sbin/nologin$
chrony:x:985:985:chrony system user:/var/lib/chrony:/sbin/nologin$
clevis:x:986:986:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/usr/sbin/nologin$
cockpit-wsinstance:x:989:989:User for cockpit-ws instances:/:/usr/sbin/nologin$
dbus:x:81:81:System Message Bus:/:/usr/sbin/nologin$
nscd:x:28:28:NSCD Daemon:/:/usr/sbin/nologin$
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/usr/sbin/nologin$
setroubleshoot:x:987:987:SELinux troubleshoot server:/var/lib/setroubleshoot:/usr/sbin/nologin$
systemd-coredump:x:997:997:systemd Core Dumper:/:/usr/sbin/nologin$
tss:x:59:59:Account used for TPM access:/:/usr/sbin/nologin$
[root@localhost ~]#

cat > 文件路径 <<EOF
内容
EOF

示例:创建yum仓库文件

复制代码
cat > /etc/yum.repos.d/dvd.repo <<EOF
[BaseOS]
name=BaseOS
baseurl=file:///media/BaseOS
gpgcheck=0
enabled=1
[AppStream]
name=AppStream
baseurl=file:///media/AppStream
gpgcheck=0
enabled=1
EOF

2. more

  • 分页查看文件
  • q 退出
  • 查看完成自动退出

**示例:**more 文件

复制代码
[root@localhost etc]# more /etc/passwd

3. less

  • 也是分页查看,但功能更强
  • 区别
    • 支持方向键上下逐行滚动,Ctrl+F/Ctrl+B翻页
    • 查看完不会自动退出
    • 支持关键字过滤(从当前页开始搜索,到末尾停止)
    • v 键调用vim编辑
    • q 退出
  • 系统man手册页默认使用less
  • 示例:分页查看目录内容

示例:

复制代码
ll /etc | less   #看目录

less /etc/passwd     #看文件

注:如果用less查看文件关键字一定要翻到第一行,因为less只会过滤当前页面的关键字


二、文本过滤工具

grep -- 根据关键字过滤行

常用选项

|----------------------|---------------------------|
| 选项 | 说明 |
| --color=auto(默认选项) | 关键字高亮 |
| -i | 忽略大小写 |
| -v | 反选(显示不匹配的行) |
| -n | 显示行号 |
| -o | 只显示关键字本身 |
| -c | 统计关键字所在的行数(一行多个只算一次) |
| -w | 按单词过滤(单词由字母、数字、下划线组成) |
| -A n | 显示匹配行及后面n行 |
| -B n | 显示匹配行及前面n行 |
| -C n | 显示匹配行及前后各n行 |
| -r | 递归搜索目录 |
| -l | 只显示包含关键字的文件名(常与-r搭配) |
| -q | 静默模式(通过echo $?判断是否匹配成功) |

基本用法

复制代码
 grep sshd /etc/passwd

**示例:**取反

复制代码
[root@localhost ~]# grep  -v 'nologin' /etc/passwd

**示例:**grep -w

复制代码
[root@localhost ~]# df
Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs            4096       0      4096   0% /dev
tmpfs             857968       0    857968   0% /dev/shm
tmpfs             343188    4852    338336   2% /run
efivarfs             256      11       240   5% /sys/firmware/efi/efivars
/dev/vda3       41773036 3810360  37962676  10% /
/dev/vda2         102156    7628     94528   8% /boot/efi
tmpfs             171592       0    171592   0% /run/user/0
[root@localhost ~]# df |grep -w '/'
/dev/vda3       41773036 3810360  37962676  10% /

示例

复制代码
# 过滤可登录用户(以/bin/bash结尾)
grep '/bin/bash$' /etc/passwd

# 忽略大小写搜索failed
grep -i failed /var/log/messages

# 递归搜索/etc下包含selinux的文件
grep -r selinux /etc/

# 只显示文件名
grep -rl selinux /etc/

三、正则表达式

  • 功能:通过不同的元字符实现不同规律的过滤
  • 分类:基本正则、扩展正则

基本正则表达式(BRE)

|----------|--------------|
| 元字符 | 含义 |
| ^ | 匹配行首 |
| $ | 匹配行尾 |
| [abc] | 匹配列表中的任意单个字符 |
| [a-z] | 匹配任意小写字母 |
| [0-9] | 匹配任意数字 |
| [^a-z] | 排除小写字母 |
| . | 匹配任意单个字符 |
| * | 匹配前一项0次或多次 |
| \ | 转义字符 |

**示例:**筛选root开头的用户

复制代码
[root@localhost ~]# cat passswd.txt
root:x:0:0:Super User:/root:/bin/bash
nobody:x:65534:65534:Kernel Overflow User:/:/usr/sbin/nologin
chrony:x:985:985:chrony system user:/var/lib/chrony:/sbin/nologin
clevis:x:986:986:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/usr/sbin/nologin
cockpit-wsinstance:x:989:989:User for cockpit-ws instances:/:/usr/sbin/nologin
dbus:x:81:81:System Message Bus:/:/usr/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/usr/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/usr/sbin/nologin
setroubleshoot:x:987:987:SELinux troubleshoot server:/var/lib/setroubleshoot:/usr/sbin/nologin
systemd-coredump:x:997:997:systemd Core Dumper:/:/usr/sbin/nologin
tss:x:59:59:Account used for TPM access:/:/usr/sbin/nologin
Aroot:x:1066:1066:Super User:/Aroot:/bin/bash
1066root:x:1066:1066:Super User:/Aroot:/bin/bash

[root@localhost ~]# grep '^root' passswd.txt
root:x:0:0:Super User:/root:/bin/bash
[root@localhost ~]#

**示例:**筛选bash结尾行

复制代码
[root@localhost ~]# cat passswd.txt
root:x:0:0:Super User:/root:/bin/bash
nobody:x:65534:65534:Kernel Overflow User:/:/usr/sbin/nologin
chrony:x:985:985:chrony system user:/var/lib/chrony:/sbin/nologin
clevis:x:986:986:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/usr/sbin/nologin
cockpit-wsinstance:x:989:989:User for cockpit-ws instances:/:/usr/sbin/nologin
dbus:x:81:81:System Message Bus:/:/usr/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/usr/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/usr/sbin/nologin
setroubleshoot:x:987:987:SELinux troubleshoot server:/var/lib/setroubleshoot:/usr/sbin/nologin
systemd-coredump:x:997:997:systemd Core Dumper:/:/usr/sbin/nologin
tss:x:59:59:Account used for TPM access:/:/usr/sbin/nologin
Aroot:x:1066:1066:Super User:/Aroot:/bin/bash
1066root:x:1066:1066:Super User:/Aroot:/bin/bash

[root@localhost ~]# grep 'bash$' passswd.txt
root:x:0:0:Super User:/root:/bin/bash
Aroot:x:1066:1066:Super User:/Aroot:/bin/bash
1066root:x:1066:1066:Super User:/Aroot:/bin/bash
[root@localhost ~]#

**示例:**匹配任意单字符

复制代码
[root@localhost ~]# grep '[rnc]' passswd.txt

**示例:**排除小写

复制代码
[root@localhost ~]# grep  '[^a-z]' passswd.txt

扩展正则表达式(ERE)

grep使用-E启用,或使用egrep

|---------|--------------|
| 元字符 | 含义 |
| ? | 匹配前一项0次或1次 |
| | | 或(匹配多个关键字) |
| {m} | 匹配前一项恰好m次 |
| {m,} | 至少m次 |
| {,m} | 至多m次 |
| {m,n} | 至少m次,至多n次 |
| () | 将括号内内容视为一个整体 |

示例:|

复制代码
[root@localhost ~]# grep -E 'root|nobody|chrony' passswd.txt

示例: {m}

复制代码
[root@localhost ~]# grep -E 'root{2}' passswd.txt

示例:( )

复制代码
[root@localhost ~]# grep -E '(root){2}' passswd.txt

示例:{m,n}

复制代码
[root@localhost ~]# grep -E '(root){2,3}' passswd.txt

实战:获取IPV4地址

复制代码
[root@localhost ~]# ifconfig | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'| grep  -Ev '255$|1$|0$'

四、文本提取工具

cut -- 提取列或字符

常用选项

  • -d:指定分隔符(默认制表符)
  • -f:指定列(如-f 1(第一列),-f 1,3(1和3),-f 1-3(1到3) -f 3-(3到最后))

示例

复制代码
# 提取所有可登录用户的用户名
grep '/bin/bash$' /etc/passwd | cut -d ':' -f 1

# 提取IP地址
ifconfig | grep inet -w | cut -d ' ' -f 10

# 提取根分区使用率(百分比数字)
df | grep -w / | cut -d ' ' -f14 | cut -c 1

五、文本统计工具

wc -- 统计行数、单词数、字节数

  • 统计目录只统计一级目录

|------|-----|
| 选项 | 说明 |
| -l | 行数 |
| -w | 单词数 |
| -c | 字节数 |

**示例:**统计目录数

复制代码
#统计home目录下的文件目录数
[root@localhost home]# ls
aa  devops  lisi  user1  zhangsan
[root@localhost home]# ls |wc
      5       5      30
[root@localhost home]#

注意ll和ls的区别,ll会多一行,统计用ls

**示例:**统计登入失败用户有多少条记录

last是查看登入的

lastb是查看登入失败的

lastlog=last+lastb

**示例:**查看文件有多大(ll可以所以没必要)


六、文本列出工具

head -- 显示文件开头

  • 默认前10行
  • -n 数字:前n行
  • -n +数字:前n行(和-n一样)
  • -n -数字:去掉末尾数字行

示例:查看/etc/passwd前3行

复制代码
[root@localhost home]# head -n 3 /etc/passwd
root:x:0:0:Super User:/root:/bin/bash
nobody:x:65534:65534:Kernel Overflow User:/:/usr/sbin/nologin
chrony:x:985:985:chrony system user:/var/lib/chrony:/sbin/nologin
[root@localhost home]#

tail -- 显示文件末尾

  • 默认后10行
  • -n 数字:后n行
  • -n +数字:从第数字行开始显示,一直到最后
  • -f:实时监控文件追加(常用于查看日志)

**示例:**查看/etc/passwd文件后3行内容

复制代码
[root@localhost home]# cat /etc/passwd
root:x:0:0:Super User:/root:/bin/bash
nobody:x:65534:65534:Kernel Overflow User:/:/usr/sbin/nologin
chrony:x:985:985:chrony system user:/var/lib/chrony:/sbin/nologin
clevis:x:986:986:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/usr/sbin/nologin
cockpit-wsinstance:x:989:989:User for cockpit-ws instances:/:/usr/sbin/nologin
dbus:x:81:81:System Message Bus:/:/usr/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/usr/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/usr/sbin/nologin
setroubleshoot:x:987:987:SELinux troubleshoot server:/var/lib/setroubleshoot:/usr/sbin/nologin
systemd-coredump:x:997:997:systemd Core Dumper:/:/usr/sbin/nologin
tss:x:59:59:Account used for TPM access:/:/usr/sbin/nologin

[root@localhost home]# tail -n 3 /etc/passwd
setroubleshoot:x:987:987:SELinux troubleshoot server:/var/lib/setroubleshoot:/usr/sbin/nologin
systemd-coredump:x:997:997:systemd Core Dumper:/:/usr/sbin/nologin
tss:x:59:59:Account used for TPM access:/:/usr/sbin/nologin
[root@localhost home]#

示例: tail -n +数字

复制代码
[root@localhost home]# cat /etc/passwd
root:x:0:0:Super User:/root:/bin/bash
nobody:x:65534:65534:Kernel Overflow User:/:/usr/sbin/nologin
chrony:x:985:985:chrony system user:/var/lib/chrony:/sbin/nologin
clevis:x:986:986:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/usr/sbin/nologin
cockpit-wsinstance:x:989:989:User for cockpit-ws instances:/:/usr/sbin/nologin
dbus:x:81:81:System Message Bus:/:/usr/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/usr/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/usr/sbin/nologin
setroubleshoot:x:987:987:SELinux troubleshoot server:/var/lib/setroubleshoot:/usr/sbin/nologin
systemd-coredump:x:997:997:systemd Core Dumper:/:/usr/sbin/nologin
tss:x:59:59:Account used for TPM access:/:/usr/sbin/nologin
[root@localhost home]# tail -n +3 /etc/passwd
chrony:x:985:985:chrony system user:/var/lib/chrony:/sbin/nologin
clevis:x:986:986:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/usr/sbin/nologin
cockpit-wsinstance:x:989:989:User for cockpit-ws instances:/:/usr/sbin/nologin
dbus:x:81:81:System Message Bus:/:/usr/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/usr/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/usr/sbin/nologin
setroubleshoot:x:987:987:SELinux troubleshoot server:/var/lib/setroubleshoot:/usr/sbin/nologin
systemd-coredump:x:997:997:systemd Core Dumper:/:/usr/sbin/nologin
tss:x:59:59:Account used for TPM access:/:/usr/sbin/nologin
[root@localhost home]#

七、文本排序工具

sort -- 排序

  • 默认按照ASCII 字符表排序

常用选项

  • -t:指定分隔符
  • -k:指定排序的列
  • -n:按数值排序(默认按字符串)
  • -r:降序
  • -u:去重(相邻重复行)

示例:按UID排序,找出最大UID的用户

复制代码
sort -t : -k 3 -n /etc/passwd | cut -d ':' -f1,3 | tail -n 1
# 或降序取第一行
sort -t : -k 3 -n -r /etc/passwd | cut -d ':' -f1,3 | head -n 1

八、文本去重工具

uniq -- 去重(仅处理相邻重复行)

  • -c:统计重复次数

搭配sort使用

复制代码
# 统计登录失败次数
lastb | cut -d ' ' -f1 | head -n -2 | sort | uniq -c

九、文本比较工具

diff -- 比较文件差异

  • 无输出表示内容相同

  • 通过echo $?判断(0相同,非0不同)

  • 常用于检查文件是否被篡改

  • diff 文件1 文件2

    [root@localhost ~]# diff passwd1.txt passwd.txt #无输出表示内容相同
    [root@localhost ~]# echo '1123' >>passwd.txt
    [root@localhost ~]# diff passwd.txt passwd1.txt
    12d11
    < 1123 #意思是把左边的12行删除就能和右边保持一致,多了1123这几个字符
    [root@localhost ~]#

代表1到7,1到40行都不一样

vimdiff -- 可视化比较

语法:vimdiff 文件1 文件2

  • 在vim中高亮显示差异
  • q 退出
  • ctrl+w+方向键切换

十、文本编辑工具(sed)

sed -- 流编辑器(非交互式)

工作流程 :将文件内容读入模式空间(缓冲区) → 按命令处理 → 输出

常用选项

|----------|-------------|
| 选项 | 说明 |
| -i | 直接修改源文件 |
| -i.bak | 先备份再修改 |
| -n | 不自动输出模式空间内容 |
| -e | 多个处理动作 |

格式

复制代码
sed [选项] '地址定界 处理动作' 文件

地址定界(指定处理哪些行)

|---------------|--------------|
| 写法 | 含义 |
| 数字 | 指定行号 |
| $ | 最后一行 |
| /关键字/ | 匹配关键字的行 |
| /关键字/I | 忽略大小写匹配 |
| #,# | 第#行到第#行 |
| #,/关键字/ | 从第#行到第一个关键字行 |
| /关键字/,/关键字/ | 两个关键字之间的行 |

注意 :若关键字包含/,可用\转义或用其他字符(如%)代替,例如:sed '\%/bin/bash%p'

处理动作

|----------------|------------------|
| 动作 | 说明 |
| p | 打印(常与-n合用) |
| d | 删除整行 |
| a\ | 在匹配行下一行追加 |
| i\ | 在匹配行上一行插入 |
| c\ | 替换整行内容 |
| s/old/new/ | 替换(默认只替换每行第一个匹配) |
| s/old/new/g | 全局替换 |
| s/old/new/i | 忽略大小写 |
| s/old/new/gi | 全局+忽略大小写 |

示例

复制代码
# 删除第1行
sed '1d' passwd

# 打印匹配root的行
sed '/root/p' -n passwd

# 在文件末尾追加
sed -i.bak '$a\PermitRootLogin yes' /etc/ssh/sshd_config

# 替换SELINUX配置
sed -i.bak '/^SELINUX=enforcing/c\SELINUX=disable' /etc/selinux/config

# 替换路径(使用|作为分隔符)
sed 's|/bin/bash|/sbin/nologin|' passwd -i

十一、文本转换工具

tr -- 字符转换/删除

复制代码
# 小写转大写
cat /etc/passwd | tr 'a-z' 'A-Z'

# 删除字符(-d)
echo "hello123" | tr -d '0-9'   # 输出 hello

十二、常用快捷键

|--------|---------------|
| 快捷键 | 作用 |
| Ctrl+C | 中断当前命令 |
| Ctrl+Z | 停止并放入后台 |
| Ctrl+S | 暂停屏幕输出 |
| Ctrl+Q | 恢复屏幕输出 |
| Ctrl+U | 剪切光标前所有内容 |
| Ctrl+Y | 粘贴 |
| Ctrl+K | 剪切光标后所有内容 |
| Ctrl+A | 跳到行首 |
| Ctrl+E | 跳到行尾 |
| Ctrl+W | 删除光标前一个单词 |
| Ctrl+L | 清屏(与clear有区别) |


相关推荐
卡次卡次11 小时前
vibecoding起步注意点:插件、Skills、MCP、Hooks
服务器·数据库·python·oracle
Elastic 中国社区官方博客1 小时前
每次操作一个 API 调用:Elastic Cloud Hosted 如何让大规模部署管理变得可行
大数据·运维·数据库·elasticsearch·搜索引擎·serverless
载数而行5201 小时前
Linux 4常用指令(文件/时间/搜索查找/压缩解压指令)
linux
和舒貌2 小时前
【无标题】
服务器
不做无法实现的梦~2 小时前
MAVLink 协议教程
linux·stm32·嵌入式硬件·算法
江华森2 小时前
Zabbix 6.4 全栈部署与运维完全指南
运维·zabbix
实心儿儿2 小时前
Linux —— 线程控制(2)
linux·运维·服务器
烛衔溟2 小时前
TypeScript 模块与声明文件全解
linux·ubuntu·typescript
量子炒饭大师2 小时前
【Linux系统编程:进程概念】——【从 冯诺依曼系统体系结构 到 操作系统】
linux·运维·服务器·操作系统·冯诺依曼