Linux文本处理命令理论学习

第一章 文本文件查看命令

1.1 cat / tac 命令

功能:显示文本文件内容,适合显示短文档。

  • cat 文件名:显示文件内容
  • cat -n 文件名:显示文件内容并标注行号
  • tac 文件名:反向显示文件内容(从最后一行开始)

示例:

cat /etc/passwd

cat -n /etc/passwd

1.2 more / less 命令

功能:分屏显示文本文件内容,适合长文档显示。

  • more 文件名:分屏显示,空格键翻页,回车键逐行,q退出
  • more +10 文件名:从第10行开始分屏显示
  • less 文件名:分屏显示,支持空格键、回车键、PgDn、PgUp翻页,q退出

示例:

more /etc/passwd

less /etc/passwd

more +10 /etc/passwd

1.3 head / tail 命令

功能:显示文本文件的前或后若干行(横向截取文本文件内容)。

  • head -n N 文件名:显示文件前N行(head -4 等同于 head -n 4)
  • tail -n N 文件名:显示文件后N行
  • tail -n +N 文件名:显示从第N行开始到文件尾的内容
  • tail -f 文件名:跟踪显示不断增长的文件结尾内容(常用于日志文件监控)

示例:

head -4 myalllist

tail -n 4 myalllist

tail -n +10 myalllist

tail -f /var/log/messages

第二章 文本文件分析命令

2.1 wc 命令

功能:统计文本文件的行数、字数、字符数。

示例:

$ wc aaa

6 5 24 aaa

输出含义:6行、5个词、24个字符

2.2 sort 命令

功能:以行为单位对文本文件排序。

示例:

$ sort aaa

123

342

abc

bcd

xxx

2.3 uniq 命令

功能:删除文本文件中连续的重复行。

2.4 diff 命令

功能:比较两个文本文件的差异。

  • diff 文件1 文件2:比较两个文件的差异
  • diff3 文件1 文件2 文件3:比较三个文件的差异
  • patch 文件 补丁文件:为文本文件打补丁

第三章 文本剪切工具------cut命令

3.1 命令格式

cut --cbdf 文件名

3.2 参数说明

参数 说明
-c 以字符为单位进行分割
-b 以字节为单位进行分割
-d 自定义分隔符,默认为制表符
-f 与-d一起使用,指定显示哪个区域

3.3 使用示例

以冒号为分隔符,提取第7个字段

cut -d ":" -f 7 /etc/passwd

截取第2到第10个字符

ls -l | cut -c 2-10

组合使用:取前5行的第1个字段,再取后3行

head -5 /etc/passwd | cut -d ":" -f 1 | tail -n 3

第四章 文本搜索工具------grep命令

4.1 命令格式

grep 选项 模式 文件...

4.2 常用选项

选项 说明
-c 只显示匹配行的次数
-i 搜索时不区分大小写
-n 输出匹配行的行号
-v 输出不匹配的行(反向选择)
-r 对目录(子目录)的所有文件递归查找

4.3 模式说明

  • 普通字符串:直接搜索文本,如 grep root /etc/passwd
  • 正则表达式:通常用单引号括起来,如 grep '^root' /etc/passwd
  • 可以在多个文件中查找,省略文件参数则表示在标准输入中查找
  • 查找过程不会改变原文件,可使用输出重定向保存结果

4.4 grep命令举例

$ cat aaa

abc

bcd

123

342

xxx

$ grep '^a-z' aaa

abc

bcd

xxx

$ grep -n '^a-z' aaa

1:abc

2:bcd

6:xxx

$ grep -v ' ' aaa

abc

bcd

123

342

xxx

第五章 正则表达式

5.1 基本概念

正则表达式用于进行文本的查找、替换等操作,由普通字符 和元字符组成。

  • 普通字符:包括大小写字母、数字(所有非元字符)
  • 元字符:具有特殊含义的字符

5.2 正则表达式分类

类型 全称 支持的文本工具
BRE 基本正则表达式 grep、ed、sed、vim、emacs
ERE 扩展正则表达式 egrep、awk

5.3 通配符与正则表达式的区别

对比项 通配符 正则表达式
用途 shell自带的文件名查找工具 Linux命令中搜索字符串
匹配方式 完全匹配 包含匹配

5.4 元字符详解

元字符 含义 类型 举例 说明
^ 匹配首字符 BRE ^x 以字符x开始的字符串
匹配尾字符 BRE x 以x字符结尾的字符串
. 匹配任意一个字符 BRE l..e love, life, live
? 匹配前面零次或一次 ERE xy? x, xy
* 匹配前面零次或多次 BRE xy* x, xy, xyy, xyyy
+ 匹配前面一次或多次 ERE xy+ xy, xyy, xyyy
... 匹配括号内任意字符 BRE xyz x, y, z
() 对正则表达式分组 ERE (xy)+ xy, xyxy

5.5 量词元字符

元字符 含义 类型 举例 说明
{n} 匹配n次 BRE go{2}gle google
{n,} 匹配最少n次 BRE go{2,}gle google, gooogle
{n,m} 匹配n到m次 BRE go{2,4}gle google, gooogle, goooogle
{n} 匹配n次 ERE go{2}gle google
{n,} 匹配最少n次 ERE go{2,}gle google, gooogle
{n,m} 匹配n到m次 ERE go{2,4}gle google, gooogle
| 以或逻辑连接 ERE good|bon 匹配good或bon
\ 转义字符 BRE * 匹配字面*

5.6 方括号内元字符

元字符 含义 类型 举例 说明
^ 非(仅用于启始字符) BRE \^xyz 匹配xyz之外的任意字符
- 指明字符范围 BRE a-zA-Z 匹配任意字母
\ 转义字符 BRE \\. 匹配字面.

5.7 正则表达式练习示例

表达式 匹配示例
\^1 abc, 123, 1av, 321
Ggreen green, 12Ggreen, Green, Ggreen
a-za-z* ac, abcd, Abvvc, 12bdg
^.0-90-9 .2345, .14rey
0-9{2}-0-9{2}-0-9{4} 02-06-2020, 22-66-1111

第六章 文本分析工具------awk命令

6.1 基本概念

awk是一种处理文本文件的语言,是一个强大的文本分析工具。

6.2 命令格式

awk 选项参数 'script' var=value file(s)

或

awk 选项参数 -f scriptfile var=value file(s)

6.3 使用示例

将UID大于等于500的用户及UID打印出来

awk -F: '3>=500 {print 1,$3}' /etc/passwd

统计文件大小总和

ls -l *.txt | awk '{sum+=$5} END {print sum}'

条件判断

cat /etc/passwd | awk -F: '{

if (1 == "root"){print 1;}

else if(1 == "bin"){print 2;}

else{print $3;}

}'

6.4 关键语法说明

  • -F::指定字段分隔符为冒号
  • 1,2:分别表示第1列、第2列内容
  • NR==5:处理第5行
  • /pattern/:正则匹配列
  • {print ...}:输出指定字段

第七章 流编辑器------sed命令

7.1 基本概念

sed是一个非交互式的行编辑器,在命令行中输入编辑命令、指定输入文件,然后在屏幕上查看输出。

7.2 命令格式

sed -hnV -e\ -f\ 文本文件

7.3 参数说明

参数 说明
-e 以指定script处理输入文本
-f 以指定script文件处理输入文本
-h/--help 显示帮助
-n/--quiet/--silent 仅显示script处理后的结果
-V/--version 显示版本信息

7.4 动作说明

动作 说明
a 新增,在指定行后追加字符串
c 取代,取代n1,n2之间的行
d 删除
i 插入,在指定行前插入字符串
p 打印
s 取代,通常搭配正则表达式

7.5 sed命令举例

查看文件并删除2-5行

cat -n /etc/passwd | sed '2,5d'

在第二行后加上"drink tea"

cat -n /etc/passwd | sed '2a drink tea'

显示文件中有/root/的行

sed -n '/root/p' /etc/passwd

在文件末尾增加一行(直接修改文件)

sed -i '$a # This is a test' exp.txt

将所有Windows替换成Linux(直接修改文件)

sed -i 's/Windows/Linux/g' myfile

仅在屏幕输出替换结果(不修改原文件)

sed 's/Windows/Linux/g' myfile

将连续出现的c压缩成单个c

sed 's/cc*/c/g' myfile

删除每行前导空白字符

sed 's/^ \\t*//' myfile

删除所有空白行

sed 's/^$//' myfile

在每行开头加上尖括号和空格

sed 's/^/> /' myfile

删除路径前缀

sed 's/.*\///' myfile

第八章 Vim文本编辑器

8.1 vi的三种工作模式

模式 说明
命令模式(Command mode) 输入的字符作为命令解释执行,不显示输入内容
输入模式(Insert mode) 输入的字符作为文件内容被保存并显示
末行模式(Last line mode) 在屏幕最末行接收行命令输入并执行

8.2 模式转换

  • 命令模式 → 输入模式:键入 i/I(插入)、o/O(在下方/上方插入新行)、a/A(在后面/行尾追加)
  • 命令模式 → 末行模式:键入 :、?、/、!
  • 输入模式 → 命令模式:按 Esc 键

8.3 末行模式命令

保存退出相关: - :w 文件名:保存至当前文件或指定文件 - :q:未修改文件,退出 - :wq / :x:保存文件并退出 - :q!:放弃修改,不保存退出 - :e!:放弃修改

搜索命令: - /pattern:从光标处向下搜索 - ?pattern:从光标处向上搜索

全局替换命令: - :s/p1/p2/:将当前行中第1个p1用p2替换 - :s/p1/p2/g:将当前行中所有p1用p2替换 - :s/p1/p2/gc:替换前要求确认 - :n1,n2s/p1/p2/gc:将n1至n2行中所有p1用p2替代 - :g/p1/s//p2/gp:将文件中所有p1用p2替换 - :1,$s/p1/p2/g 或 :%s/p1/p2/g:全文替换

其他常用命令: - :n:跳至第n行 - :n1,n2co n3:拷贝n1到n2行到第n3行下 - :n1,n2m n3:移动n1到n2行到第n3行下 - :n1,n2d:删除n1到n2行 - :!command:执行shell命令 - :set nu / :set nonu:设定/取消行号显示 - :set ai / :set noai:设定/取消自动缩进

第九章 Linux C语言编译基础------gcc

9.1 gcc编译器

gcc是将用vi编写的源代码编译成可执行程序的编译器集合。

  • 可编译语言:C、C++、Objective C、Fortran、Java、Fortran和Pascal
  • 命令格式:gcc 选项 要编译的文件 -o 目标文件

9.2 编译示例

// hello.c

#include <stdio.h>

int main()

{

printf("Hello world!\n");

}

编译命令:

gcc hello.c -o hello

./hello

若未指定输出文件(-o参数),默认输出为 a.out

第十章 思考题与答案解析

思考题1:grep命令中-i、-n、-v参数的作用

参数 作用 示例
-i 忽略大小写匹配 grep -i "root" passwd.bak 会同时匹配root、Root、ROOT
-n 显示匹配行的行号 grep -n "bash" passwd.bak 输出类似 24:root:x:0:0:root:/root:/bin/bash
-v 反向选择,显示不匹配的行 grep -v "nologin" passwd.bak 显示所有不包含nologin的行

记忆技巧 : - -i :解决"大小写不确定"的问题 - -n :解决"匹配行在哪里"的问题 - -v:解决"排除某些行"的问题

思考题2:grep、sed、awk对比

工具 核心定位 主要用途
grep 文本搜索/过滤器 按模式查找行,输出匹配或不匹配的行
sed 流编辑器 对文本进行替换、删除、插入、追加等编辑操作
awk 文本分析/报表工具 按列提取、格式化输出、条件筛选和统计计算

共同点: - 都是Linux下常用的文本处理工具 - 都可以处理文本文件,都支持管道输入 - 都支持正则表达式,可进行模式匹配 - 都可用于日志分析、配置文件处理等场景

不同点 : - grep 侧重"找" :主要用于筛选出符合条件的行,不修改文件内容。例:grep "ERROR" app.log - sed 侧重"改" :按行处理文本,适合替换、删除、插入内容,配合-i可直接修改文件。例:sed -i 's/old/new/g' file.txt - awk 侧重"算"和"取列":把每一行按字段拆分,适合提取指定列、条件判断、求和统计。例:awk -F: '{print 1,7}' passwd.bak

简单记忆:grep搜一搜,sed改一改,awk算一算。

管道组合示例:

grep "ERROR" app.log | awk '{print 2,5}' | sed 's/old/new/g'

先用grep找到需要的行,再用awk提取字段,最后用sed做内容替换。

思考题3:cut命令中-d和-f参数的作用

参数 作用 示例
-d 指定字段分隔符 cut -d: -f1 /etc/passwd 表示用冒号作为分隔符
-f 指定要提取的字段编号 cut -d: -f1,7 /etc/passwd 表示提取第1个和第7个字段

简单理解 : - -d 决定"按什么切":默认分隔符是制表符,如果文本用冒号、逗号分隔,就需要用-d指定 - -f 决定"取第几段":字段编号从1开始

思考题4:管道命令"|"与重定向命令">"的区别

比较项 管道 | 重定向 >
连接对象 命令与命令 命令与文件
数据去向 传给下一个命令继续处理 写入文件
是否保存结果 不保存,只在内存中传递 会保存到文件中
典型用途 多命令组合处理文本 把命令结果保存到文件

管道示例:ls | grep txt------把ls的结果交给grep继续处理,不生成新文件

重定向示例:ls > list.txt------把ls的结果写入list.txt文件,覆盖原有内容

记忆技巧 : - | 是命令之间的"接力棒":前一个命令跑完,把结果交给后一个命令继续跑 - > 是命令结果的"存档":把输出写进文件,方便以后查看

第十一章 总结

本次理论学习涵盖了Linux文本处理的核心工具链,主要包括以下几个层面:

文本查看层:cat、more、less、head、tail等命令提供了灵活的文件内容查看方式,满足不同场景下的阅读需求。

文本搜索层:grep是最强大的文本搜索工具,配合正则表达式可以实现精确的模式匹配。其-i(忽略大小写)、-n(显示行号)、-v(反向选择)三个参数在实际工作中使用频率极高。

文本剪切层:cut命令通过-d指定分隔符、-f指定字段的方式,能够快速从格式化文本中提取所需字段。配合管道符可以与其他命令灵活组合。

文本分析层:awk是功能最强大的文本分析工具,支持字段提取、条件判断、统计计算等高级操作,适合处理结构化文本数据。

文本编辑层:sed作为流编辑器,支持插入、删除、替换等文本编辑操作,配合-i参数可直接修改文件,是批量文本处理的利器。

编辑器层:vi/vim作为Linux下最经典的文本编辑器,掌握其三种工作模式(命令模式、输入模式、末行模式)及模式转换是高效编辑文件的基础。

编译层:gcc编译器是将源代码编译为可执行程序的基础工具,掌握其基本用法是Linux编程的入门必备。

核心思想:Linux文本处理的精髓在于"管道符|"的连接能力------将多个简单命令组合成强大的处理流水线,实现"一个命令做一件事,多个命令协作完成复杂任务"的设计哲学。

相关推荐
拂拉氏1 小时前
【知识讲解】 Linux进程间通信之管道与共享内存
linux·进程间通信
无足鸟ICT1 小时前
【RHCA+】rpm命令(安装、升级、卸载和查询)
linux·运维·服务器
吹什么轩1 小时前
linux系统复习:从冯·诺依曼到操作系统:一切的开场
linux·运维·服务器
程序员-Benothing1 小时前
SSH从入门到精通:密钥登录、config配置、跳板机
linux·运维·服务器·ssh
dadaobusi1 小时前
学习: Triton
学习
一条泥憨鱼1 小时前
【计算机网络】| 从 MAC 到 NAT 的跨网段通信全链路
服务器·网络·学习·计算机网络·macos
IM架构师1 小时前
# 一次老旧PHPCMS网站入侵排查:从SQL注入到PHP后门,以及IP白名单止血
sql·tcp/ip·php
miao_0v01 小时前
10.20任务
学习·个人开发
H.莓飛1 小时前
【Linux】自主 Shell
linux·运维·服务器·c语言·开发语言·visual studio