Linux教程 / 第 50 节
第5章:文件编辑与处理
掌握文本编辑器和文本处理工具
本章目标
- 掌握vim基本操作
- 学会使用sed进行文本替换
- 了解awk文本处理
- 掌握文件比较工具
- 能够高效编辑和处理配置文件
5.1 Vim文本编辑器
5.1.1 Vim简介
Vim (Vi IMproved) 是Linux中最强大的文本编辑器。
为什么学习Vim?
- 🚀 高效: 纯键盘操作,无需鼠标
- 🌍 普及: 几乎所有Linux系统都预装
- 💪 强大: 支持插件,功能丰富
- 🔧 必备: 服务器环境常用编辑器
5.1.2 Vim模式
Vim有三种主要模式:
普通模式 (Normal Mode) ← 默认模式,用于导航和命令
↓ 按 i, a, o
插入模式 (Insert Mode) ← 编辑文本
↓ 按 ESC
普通模式
↓ 按 :
命令模式 (Command Mode) ← 执行命令 (保存、退出等)
5.1.3 基本操作
打开和退出
# 打开文件
vim file.txt
# 打开文件并跳到第10行
vim +10 file.txt
# 打开多个文件
vim file1.txt file2.txt
# 退出Vim (在命令模式)
:q # 退出
:q! # 强制退出,不保存
:w # 保存
:wq # 保存并退出
:x # 保存并退出 (等同于:wq)
ZZ # 保存并退出 (普通模式)
ZQ # 不保存退出 (普通模式)
进入插入模式
i # 在光标前插入
a # 在光标后插入
I # 在行首插入
A # 在行尾插入
o # 在下一行插入
O # 在上一行插入
移动光标 (普通模式)
# 基本移动
h # 左移
j # 下移
k # 上移
l # 右移
# 单词移动
w # 下一个单词开头
b # 上一个单词开头
e # 下一个单词结尾
# 行内移动
0 # 行首
^ # 行首(非空白字符)
$ # 行尾
# 页面移动
gg # 文件开头
G # 文件结尾
10G # 第10行
Ctrl+f # 下一页
Ctrl+b # 上一页
Ctrl+d # 下半页
Ctrl+u # 上半页
编辑操作
# 删除
x # 删除字符
dd # 删除行
dw # 删除单词
d$ # 删除到行尾
5dd # 删除5行
# 复制粘贴
yy # 复制行
yw # 复制单词
p # 粘贴到后面
P # 粘贴到前面
5yy # 复制5行
# 撤销和重做
u # 撤销
Ctrl+r # 重做
# 查找替换
/keyword # 向下查找
?keyword # 向上查找
n # 下一个
N # 上一个
:%s/old/new/g # 全文替换
:s/old/new/g # 当前行替换
:10,20s/old/new/g # 10-20行替换
5.1.4 实用技巧
# 显示行号
:set number
:set nu
# 取消行号
:set nonumber
:set nonu
# 语法高亮
:syntax on
# 自动缩进
:set autoindent
# 搜索高亮
:set hlsearch
# 取消搜索高亮
:noh
# 分屏
:split # 水平分屏
:vsplit # 垂直分屏
Ctrl+w w # 切换窗口
# 多文件编辑
:e file2.txt # 打开另一个文件
:bn # 下一个文件
:bp # 上一个文件
Vim配置文件 (~/.vimrc)
# 创建配置文件
cat > ~/.vimrc << 'EOF'
set number " 显示行号
set autoindent " 自动缩进
set tabstop=4 " Tab宽度
set shiftwidth=4 " 缩进宽度
set expandtab " Tab转空格
syntax on " 语法高亮
set hlsearch " 搜索高亮
set ignorecase " 忽略大小写
set smartcase " 智能大小写
EOF
5.2 sed文本处理
5.2.1 sed简介
sed = Stream Editor (流编辑器)
用于文本替换、删除、插入等操作。
5.2.2 基本用法
# 替换 (只显示,不修改文件)
sed 's/old/new/' file.txt # 替换每行第一个
sed 's/old/new/g' file.txt # 替换所有
sed 's/old/new/2' file.txt # 替换每行第2个
# 修改文件 (-i)
sed -i 's/old/new/g' file.txt # 直接修改文件
# 备份并修改
sed -i.bak 's/old/new/g' file.txt # 创建.bak备份
# 删除行 (d)
sed '3d' file.txt # 删除第3行
sed '1,5d' file.txt # 删除1-5行
sed '/pattern/d' file.txt # 删除匹配的行
sed '/^$/d' file.txt # 删除空行
sed '/^#/d' file.txt # 删除注释行
# 插入行 (i)
sed '3i\New Line' file.txt # 在第3行前插入
# 追加行 (a)
sed '3a\New Line' file.txt # 在第3行后追加
# 打印行 (p)
sed -n '1,5p' file.txt # 打印1-5行
sed -n '/pattern/p' file.txt # 打印匹配的行
5.2.3 实用示例
# 删除配置文件的注释和空行
sed '/^#/d; /^$/d' /etc/nginx/nginx.conf
# 批量替换IP地址
sed -i 's/192\.168\.1\.100/192.168.1.200/g' *.conf
# 在文件开头添加内容
sed -i '1i\#!/bin/bash' script.sh
# 替换环境变量
sed 's/${PORT}/8080/g' config.yml
# 删除行尾空格
sed 's/[[:space:]]*$//' file.txt
# 每行前添加行号
sed = file.txt | sed 'N;s/\n/\t/'
5.3 awk文本处理
5.3.1 awk简介
awk是强大的文本分析工具,特别适合处理列数据。
5.3.2 基本用法
# 打印所有行
awk '{print}' file.txt
# 打印第1列
awk '{print $1}' file.txt
# 打印第1和第3列
awk '{print $1, $3}' file.txt
# 打印最后一列
awk '{print $NF}' file.txt
# 指定分隔符 (-F)
awk -F: '{print $1}' /etc/passwd # 以:分隔
# 条件过滤
awk '$3 > 100' file.txt # 第3列大于100
awk '/pattern/' file.txt # 包含pattern的行
# 统计
awk '{sum+=$1} END {print sum}' file.txt # 求和
awk '{count++} END {print count}' file.txt # 计数
5.3.3 实用示例
# 统计文件大小
ls -l | awk '{sum+=$5} END {print sum}'
# 查看内存使用
free -m | awk 'NR==2 {print $3"MB used"}'
# 处理CSV文件
awk -F, '{print $1, $3}' data.csv
# 格式化输出
awk '{printf "%-10s %s\n", $1, $2}' file.txt
# 去重
awk '!seen[$0]++' file.txt
# 统计访问IP
awk '{print $1}' access.log | sort | uniq -c | sort -rn
5.4 文件比较
5.4.1 diff命令
# 比较两个文件
diff file1.txt file2.txt
# 并排显示 (-y)
diff -y file1.txt file2.txt
# 忽略空白 (-w)
diff -w file1.txt file2.txt
# 递归比较目录 (-r)
diff -r dir1/ dir2/
# 生成补丁
diff -u file1.txt file2.txt > changes.patch
# 应用补丁
patch file1.txt < changes.patch
5.4.2 其他比较工具
# comm - 比较已排序的文件
comm file1.txt file2.txt
# cmp - 字节比较
cmp file1.txt file2.txt
# vimdiff - 可视化比较
vimdiff file1.txt file2.txt
5.5 实战场景:修改配置文件
场景: 批量修改Nginx配置
# 1. 备份配置文件
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
# 2. 查看当前配置
grep "listen" /etc/nginx/nginx.conf
# 3. 替换端口号
sed -i 's/listen 80/listen 8080/g' /etc/nginx/nginx.conf
# 4. 删除注释和空行
sed -i '/^#/d; /^$/d' /etc/nginx/nginx.conf
# 5. 验证修改
diff /etc/nginx/nginx.conf.bak /etc/nginx/nginx.conf
# 6. 测试配置
nginx -t
# 7. 重载配置
systemctl reload nginx
5.6 常用命令速查
| 命令 | 说明 | 示例 |
|---|---|---|
vim | 文本编辑器 | vim file.txt |
sed | 流编辑器 | sed 's/old/new/g' file.txt |
awk | 文本分析 | awk '{print $1}' file.txt |
diff | 文件比较 | diff file1.txt file2.txt |
5.7 本章小结
✅ Vim编辑器: 掌握基本操作和常用命令
✅ sed处理: 文本替换、删除、插入
✅ awk分析: 列数据处理和统计
✅ 文件比较: diff比较文件差异
下一步学习
- 第6章: 文件压缩与归档
🎉 恭喜!你已经掌握了文件编辑与处理!
继续学习 → 第6章:文件压缩与归档