文本处理工具与正则表达式
内容目录
文本编辑工具之初识 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 开头的文件