第一章 文本文件查看命令
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 | |
| {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 | |
| {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文本处理的精髓在于"管道符|"的连接能力------将多个简单命令组合成强大的处理流水线,实现"一个命令做一件事,多个命令协作完成复杂任务"的设计哲学。