Linux四剑客与正则表达式完全指南:从基础到高级应用
1. 特殊符号深度解析
1.1 引号系列 ⭐⭐⭐⭐⭐
重点 :单引号、双引号、不加引号、反引号的区别与应用
引号类型
功能说明
示例
反引号 ``
优先执行内部命令
`whoami`
单引号 ''
所见即所得,完全原样输出
'aaa $USER'
双引号 ""
支持变量替换和命令执行
"aaa $USER"
不加引号
支持变量、命令、通配符和花括号扩展
aaa {01..05}
实际演示:
echo "`aaa` `whoami` $(pwd) xiaozhi{01..5} *"
# 输出:`aaa` root /home/user xiaozhi{01..5} file1 file2 file3
echo '`aaa` `whoami` $(pwd) xiaozhi{01..5} *'
# 输出:`aaa` `whoami` $(pwd) xiaozhi{01..5} *
echo `aaa` `whoami` $(pwd) xiaozhi{01..5} *
# 输出:`aaa` root /home/user xiaozhi01 xiaozhi02 xiaozhi03 xiaozhi04 xiaozhi05 file1 file2 file3
1.2 重定向符号 ⭐⭐⭐⭐⭐
标准输出重定向
符号
功能
使用场景
> 或 1>
标准输出重定向
创建文件、清空内容
>> 或 1>>
标准输出追加重定向
追加内容到文件末尾
错误输出重定向
符号
功能
使用场景
2>
标准错误输出重定向
单独处理错误信息
2>>
标准错误输出追加重定向
追加错误信息
高级重定向技巧
# 正确和错误信息都写入同一文件(脚本和定时任务常用)
command >> `aaa`.log 2>&1
# 输入重定向(与tr、xargs等命令配合使用)
tr 'a-z' 'A-Z' < passwd
# 多行内容写入文件(批量配置常用)
cat >> file.txt << EOF
第一行内容
第二行内容
...
EOF
实用案例
# 字符大小写转换
tr 'a-z' 'A-Z' < passwd
# 控制参数显示列数
seq 10 > num.txt
xargs -n3 < num.txt
# 输出:1 2 3
# 4 5 6
# 7 8 9
# 10
2. 正则表达式精通
2.1 正则表达式概述
应用场景 :Linux四剑客(grep、sed、awk、find)、编程语言(Python、Go、Java)
核心作用 :精确的字符匹配和过滤
注意事项 :使用英文符号,建议配置颜色高亮
2.2 正则符号分类
类型
包含符号
支持命令
基础正则
^ $ ^$ . * .* [] [^]
grep、sed、awk
扩展正则
+ {} () ? |
egrep、sed -r、awk
2.3 测试文件准备
cat > /xiaozhi/re.txt << EOF
I am good teacher!
I teach linux.
I like badminton ball ,billiard ball and
chinese chess!
my blog is http://www.blog.51cto.com
our size is http://blog.xiaozhi.com
my qq is 49000448
not 4900000448.
EOF
2.4 基础正则表达式详解
1) ^ - 行首匹配
grep '^I' re.txt
# 匹配所有以"I"开头的行
2) $ - 行尾匹配
grep '!$' re.txt
# 匹配所有以"!"结尾的行
3) ^$ - 空行匹配
# 排除空行和注释行(配置文件处理常用)
egrep -v '^$|#' re.txt
# 实际应用:查看sshd有效配置
egrep -v '^$|#' /etc/ssh/sshd_config
4) . - 任意单个字符
# 匹配任意非空字符(了解即可,常与*配合使用)
5) * - 前字符0次或多次出现
# .* 组合:匹配任意内容(最常用)
grep '^I.*!$' re.txt
# 匹配以I开头、!结尾的整行
6) [abc] - 字符集匹配
# 匹配特定字符开头
grep '^[Imn]' re.txt
# 匹配特定字符结尾
egrep '^[Imn].*[0-9!]$' re.txt
# 字符类型过滤
grep '[a-z]' re.txt # 小写字母
grep '[A-Z]' re.txt # 大写字母
grep '[0-9]' re.txt # 数字
7) [^abc] - 字符集排除
grep '[^abc]' re.txt
# 匹配不包含a、b、c中任意字符的行
8) 特殊字符转义
grep '\.$' re.txt
# 匹配以点号结尾的行(点号需要转义)
2.5 扩展正则表达式进阶
1) | - 或运算
# 多条件进程过滤
ps -ef | egrep 'sshd|rsyslog'
2) + - 前字符1次或多次出现
# 匹配连续字母(单词提取)
egrep '[a-z]+' re.txt
# 统计单词频率
egrep -o '[a-zA-Z]+' re.txt | sort | uniq -c | sort -nr | head -5
# 统计字母频率
egrep -o '[a-zA-Z]' re.txt | sort | uniq -c | sort -nr | head -5
3) {n,m} - 次数范围匹配
# 匹配重复字符
egrep 'x{3,5}' re.txt
# IP地址匹配(经典案例)
egrep '([0-9]{1,3}\.){3}[0-9]{1,3}' re.txt
4) () - 分组匹配
# CPU缓存信息提取
export LANG=en_US.UTF-8
lscpu | egrep -i 'L(1d|1i|2|3) cache'
# 精简写法
lscpu | egrep -i 'L(1[di]|2|3) cache'
lscpu | egrep -i 'L(1[di]|[23]) cache'
5) ? - 前字符0次或1次出现
cat > test.txt << EOF
good
goooood
gd
god
gooood
EOF
egrep 'go?d' test.txt # 匹配:gd, god
egrep 'go+d' test.txt # 匹配:good, goooood, god, gooood
egrep 'go*d' test.txt # 匹配:所有行
3. Awk命令实战应用
3.1 列处理技巧
# 基本列提取
awk -F ':' '{print $1, $2, $NF}' /etc/passwd
# 复杂分隔符:提取IP地址
ip a s ens33 | awk -F '[ /]+' 'NR==3{print $3}'
# 多分隔符:提取系统运行时间
awk -F 'up +|, +[0-9]+ user' '{print $2}' w.txt
3.2 行处理技巧
# 按行号提取
awk 'NR==3' file.txt # 第3行
awk 'NR>=3' file.txt # 第3行及以后
awk 'NR>=3 && NR<=10' file.txt # 第3-10行
# 正则匹配行
awk '/root|aaa/' /etc/passwd # 包含root或aaa的行
awk '/^root/' /etc/passwd # root开头的行
awk '/bash$/' /etc/passwd # bash结尾的行
4. 核心知识点总结
必须掌握的技能
引号区别 :理解不同引号的行为差异
重定向 :熟练掌握输出重定向和错误处理
基础正则 :^ $ . * [] 等符号的熟练应用
扩展正则 :| + {} () ? 的高级匹配技巧
Awk应用 :列提取、行过滤、复杂分隔符处理
实战应用场景
日志分析 :使用正则过滤关键信息
配置处理 :排除空行和注释,提取有效配置
数据提取 :从命令输出中精确提取所需字段
批量处理 :结合重定向进行文件操作