文本处理工具与正则表达式
内容目录
文本编辑工具之初识 Vim
Vim 是 Linux 下常见的终端文本编辑器,其主要模式有:
- 普通模式:浏览与命令模式,按
Esc进入; - 编辑模式:输入文本,按
i进入; - 命令模式:执行保存、退出、替换等命令,按
:进入。
常见操作命令
| 命令 | 说明 |
|---|---|
i | 插入模式,在光标前输入 |
a | 插入模式,在光标后输入 |
x | 删除光标所在字符 |
:w | 保存文件 |
:q | 退出 |
:wq 或 ZZ | 保存并退出 |
:q! | 强制退出不保存 |
查找与替换
:/pattern # 查找 pattern
:%s/foo/bar/g # 全文替换 foo 为 bar
文本处理核心工具
文件内容查看
cat:查看完整内容;more:分页向下查看;less:可上下滚动查看,推荐;head:查看前 N 行,如head -n 10 file.txt;tail:查看后 N 行,如tail -n 20 log.txt;nl:显示行号;wc:统计字数、行数等,常见参数:-l行数;-w单词数;-c字节数。
文件内容截取
cut:按列截取内容
cut -d ':' -f1 /etc/passwd # 使用冒号分隔,取第1列
split:分割大文件;paste:按列合并多个文件;sort:排序,可与-n(数值)-r(倒序)-k(按列) 配合;uniq:去重,常与sort配合;tr:字符替换或删除,如:
echo "abc" | tr 'a-z' 'A-Z'
文本比较工具
diff file1 file2:比较两个文件差异cmp file1 file2:按字节比较,适合二进制comm file1 file2:比较两个排序文件的异同
正则表达式基础(基础/扩展)
基本元字符
| 字符 | 含义 |
|---|---|
. | 匹配任意单个字符 |
^ | 匹配行首 |
$ | 匹配行尾 |
* | 匹配前一个字符 0 次或多次 |
[] | 匹配字符集合,例如 [abc] 匹配 a 或 b 或 c |
[^abc] | 匹配除 abc 外的任意字符 |
\ | 转义字符 |
{n} / {n,} / {n,m} | 匹配 n 次、至少 n 次、n 到 m 次 |
拓展元字符(使用 grep -E / egrep)
| 字符 | 含义 |
|---|---|
+ | 匹配前一个字符一次或多次 |
? | 匹配前一个字符 0 次或 1 次 |
| ` | ` |
() | 分组匹配 |
grep 工具:文本搜索利器
grep [选项] '模式' 文件
常用参数
-i:忽略大小写-v:显示不匹配的行-n:显示行号-r或-R:递归搜索--color=auto:高亮匹配
示例:
grep -i "error" /var/log/syslog
sed 工具:文本编辑器(非交互)
Sed 是“流编辑器”,用于按行读取、修改、输出文本。
常用语法
sed [选项] '地址 命令' 文件
示例命令
sed -n '2p' file # 只打印第2行
sed 's/foo/bar/g' file # 全文替换 foo 为 bar
sed -e '1d' file # 删除第1行
sed -e '/^$/d' file # 删除空行
awk 工具:按字段处理文本
Awk 是功能强大的文本处理语言,按列/字段读取。
基本语法
awk '模式 {动作}' 文件
常用变量
$0:整行$1:第1列NR:当前行号NF:当前行字段数
示例:
awk -F ':' '{print $1}' /etc/passwd # 打印用户名
awk '{print $1, $3}' file # 打印第1列和第3列
重定向与管道
标准输入输出
>:输出重定向(覆盖)>>:追加输出<:输入重定向
echo "hello" > out.txt
cat < in.txt
错误重定向
2>:错误输出2>&1:合并输出和错误
command > out.txt 2>&1
管道 |
把前一个命令的输出作为下一个命令的输入。
cat file | grep "error" | wc -l
通配符总结
| 符号 | 含义 |
|---|---|
* | 匹配任意字符(包括空) |
? | 匹配任意单个字符 |
[] | 匹配指定范围内的任意一个字符 |
[!abc] | 匹配不包含 abc 的任意字符 |
示例:
ls *.txt # 匹配所有 txt 文件
ls file?.sh # 匹配 file1.sh, file2.sh 等
ls [a-c]* # 匹配以 a~c 开头的文件