1. VIM 编辑器
1.1 VIM 基本概念
VIM 是一个高度可定制的文本编辑器,广泛用于程序员的日常开发中。与传统的文本编辑器不同,VIM 基于模式操作,具有以下几个主要特点:
- 普通模式:用于浏览和修改文本。
- 插入模式:用于输入文本。
- 命令模式:用于执行命令。
1.2 常用 VIM 快捷键
切换模式
- 插入模式 :按
i
进入插入模式,按Esc
返回普通模式。 - 命令模式 :按
:
进入命令模式。
编辑操作
- 删除 :
d
+ 操作(如dd
删除一行,d$
删除光标后所有字符) - 复制 :
y
+ 操作(如yy
复制一行,y$
复制光标后的字符) - 粘贴 :
p
或P
(p
粘贴到光标后,P
粘贴到光标前) - 撤销 :
u
撤销,Ctrl + r
重做
移动光标
- 上下左右移动 :
k
上,j
下,h
左,l
右 - 跳到行首/行尾 :
0
跳到行首,$
跳到行尾 - 跳到文件顶部/底部 :
gg
跳到文件开头,G
跳到文件结尾
1.3 配置与自定义
VIM 配置文件为 .vimrc
,可以通过修改该文件来定制 VIM 的行为,例如:
- 设置自动缩进:
set smartindent
- 设置行号显示:
set number
常用插件:
- NERDTree:文件浏览器
- ctrlp.vim:快速文件搜索
2. 文本处理工具
2.1 grep
命令
grep
是一个强大的文本搜索工具,用于从文件中查找符合条件的文本。
基本用法
bash
grep 'pattern' filename
- -i:忽略大小写
- -r:递归查找目录中的文件
- -v:反转匹配,即显示不包含指定模式的行
示例:
bash
grep -r 'error' /var/log/
查找 /var/log/
目录下包含 error
的日志文件。
2.2 cut
命令
cut
用于按列提取文本。
基本用法
bash
cut -d ' ' -f 1 filename
- -d:指定字段分隔符
- -f:指定要提取的字段
示例:
bash
cut -d ',' -f 1,3 filename.csv
提取 CSV 文件中第 1 列和第 3 列的数据。
2.3 sort
命令
sort
用于对文本行进行排序。
基本用法
bash
sort filename
常用选项:
- -n:按数字大小排序
- -r:倒序排列
- -u:去除重复行
示例:
bash
sort -n data.txt
按数字大小排序 data.txt
文件中的内容。
3. 正则表达式
3.1 基本正则表达式(BRE)与扩展正则表达式(ERE)
- 基本正则表达式(BRE):采用标准字符匹配。
- 扩展正则表达式(ERE) :包含更多的元字符和扩展功能,如
+
、?
等。
3.2 常用正则表达式模式
匹配任意字符
.
:匹配任意字符(除换行符外)
字符类
[a-z]
:匹配小写字母\d
:匹配数字\w
:匹配字母、数字或下划线
量词
*
:匹配 0 次或多次+
:匹配 1 次或多次?
:匹配 0 次或 1 次{n,m}
:匹配 n 到 m 次
示例:
匹配以 log
开头并且后面跟随任意字符的字符串:
regex
^log.*
3.3 常见场景与技巧
查找以特定字符结尾的行
bash
grep 'pattern$' filename
查找以特定字符开头的行
bash
grep '^pattern' filename
4. 文件查看与操作工具
4.1 cat
命令
cat
用于查看文件内容,合并多个文件,或者将内容输出到标准输出。
示例:
bash
cat file.txt
输出 file.txt
的内容。
4.2 nl
命令
nl
命令会在输出的文本中为每一行添加行号。
示例:
bash
nl file.txt
4.3 diff
命令
diff
用于比较两个文件的差异。
示例:
bash
diff file1.txt file2.txt
输出 file1.txt
和 file2.txt
之间的不同之处。
5. 常见命令组合使用案例
5.1 分析日志文件
假设你需要从大量的日志文件中提取特定时间段内的错误信息,并统计每种错误的出现频率。
例子:提取过去 24 小时的错误信息,并统计错误类型出现频率
bash
grep 'ERROR' /var/log/syslog | grep "$(date --date='24 hours ago' '+%b %d')" | awk '{print $5}' | sort | uniq -c | sort -nr
步骤解析:
grep 'ERROR' /var/log/syslog
:从/var/log/syslog
日志文件中提取所有包含 "ERROR" 的行。grep "$(date --date='24 hours ago' '+%b %d')"
:通过date
命令获取过去 24 小时的日期,过滤出这些日期的日志行。awk '{print $5}'
:使用awk
提取日志中的错误类型(假设错误类型在第 5 列)。sort
:对提取的错误类型按字母排序。uniq -c
:对排序后的错误类型进行去重并统计出现频率。sort -nr
:按频率倒序排列错误类型,显示最常见的错误类型。
5.2 批量重命名文件
在生产环境中,尤其是文件管理系统中,常常需要对一批文件进行批量重命名。假设你有一组文件,文件名包含了日期(如 report_20230101.txt
),你需要将它们的日期部分统一修改。
例子:批量修改文件名中的日期格式
bash
for file in report_*.txt; do mv "$file" "$(echo $file | sed 's/2023/2024/')"; done
步骤解析:
for file in report_*.txt
:遍历当前目录下所有以report_
开头、.txt
结尾的文件。mv "$file" "$(echo $file | sed 's/2023/2024/')"
:使用sed
替换文件名中的2023
为2024
,然后执行mv
命令重命名文件。
5.3 备份与压缩文件
假设你需要定期备份一个目录中的文件,并压缩成 .tar.gz
格式,保留一个完整备份和多个增量备份。
例子:备份并压缩文件
bash
tar -czf /backup/full_backup_$(date +\%F).tar.gz /data
步骤解析:
tar -czf /backup/full_backup_$(date +\%F).tar.gz
:使用tar
命令创建.tar.gz
格式的压缩包,并通过$(date +\%F)
生成以当前日期为文件名的压缩文件。/data
:指定需要备份的目录。
如果是增量备份,可以使用 --listed-incremental
选项来创建增量备份。