# Linux文本处理三剑客与Shell编程实战指南
---
## 一、正则表达式核心语法
### 1. 元字符速查表
| 元字符 | 功能说明 | 示例 |
|--------|------------------------------|-----------------------|
| `^` | 匹配行首 | `^root` 匹配以root开头的行 |
| `$` | 匹配行尾 | `bash$` 匹配以bash结尾的行 |
| `+` | 前导字符出现**1次或多次** | `a+` 匹配a、aa等 |
| `?` | 前导字符出现**0次或1次** | `ab?` 匹配a或ab |
| `{n}` | 前导字符出现**精确n次** | `ab{2}` 匹配abb |
| `.*` | 匹配任意字符(贪婪模式) | `x.*y` 匹配x和y之间的任意内容 |
### 2. 经典案例
```bash
# 匹配16字母单词(需处理大小写)
egrep "\b[a-zA-Z]{16}\b" /var/log/messages
# 过滤空行和注释行
grep -v '^#\|^$' /etc/passwd
# 匹配域名格式(如http://www.baidu)
egrep "[a-zA-Z]+://[a-zA-Z0-9]+\.[a-zA-Z]+(\.[a-zA-Z]+)+" file
二、文本处理三剑客深度解析
1. grep:模式搜索利器
常用选项:
-i
:忽略大小写-r
:递归搜索目录-A3
:显示匹配行后3行-E
:启用扩展正则(等同于egrep
)
实战场景:
# 查找Java异常日志(包含ERROR关键字及后续3行)
grep -A3 -i "ERROR" /var/log/java.log
2. awk:数据流处理大师
核心语法:
awk -F 分隔符 'BEGIN{初始化} /模式/{动作} END{收尾}' 文件
内置变量:
NR
:当前行号NF
:当前行字段数$0
:整行内容$1
:第一个字段
高阶案例:
# 统计用户进程CPU占用TOP5
ps aux | awk 'NR>1 {print $2, $3, $11}' | sort -k2 -nr | head -5
# 提取IP地址(多分隔符处理)
ip addr | awk -F "[ /]" '/ens33$/{print $3}'
3. sed:流编辑器
核心操作:
s/old/new/g
:全局替换d
:删除行p
:打印行i\
:插入内容到行前
实战案例:
# 批量注释SELinux配置行
sed -i '/^SELINUX=/ s/^/#/' /etc/selinux/config
# 提取特定时间段的日志
sed -n '/18\/Dec\/2021:16:55:48/,/18\/Dec\/2021:17:26:30/p' access.log
三、Shell脚本编程实战
1. 系统配置管理脚本
功能:动态配置主机名/IP,支持菜单交互
#!/bin/bash
set_hostname() {
read -p "请输入主机名:" hostname
hostnamectl set-hostname "$hostname"
}
set_ip() {
read -p "请输入IP地址:" ip
sed -i "/^IPADDR=/c IPADDR=$ip" /etc/sysconfig/network-scripts/ifcfg-ens33
}
# 菜单驱动
while true; do
echo "1. 配置主机名 | 2. 配置IP | 3. 退出"
read -p "请选择:" opt
case $opt in
1) set_hostname ;;
2) set_ip ;;
3) exit ;;
esac
done
2. 一键编译安装Nginx
功能:自动化下载、编译、配置Nginx服务
#!/bin/bash
# 安装依赖
yum install -y gcc pcre-devel openssl-devel
# 下载源码
wget https://nginx/download/nginx-1.26.3.tar.gz
tar -xvf nginx-1.26.3.tar.gz
cd nginx-1.26.3
# 编译配置
./configure --prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_v2_module
make -j$(nproc) && make install
# 环境配置
echo 'PATH=/usr/local/nginx/sbin:$PATH' >> /etc/profile
source /etc/profile
# 启动服务
nginx && echo "Nginx启动成功!"
3. 系统资源监控脚本
功能:实时检测CPU使用率并告警
#!/bin/bash
LOG="/var/log/cpu_monitor.log"
CPU_USED=$(top -bn1 | awk '/%Cpu/ {print 100-$8}')
if (( $(echo "$CPU_USED >= 80" | bc) )); then
echo "[$(date)] CPU使用率过高:${CPU_USED}%" >> $LOG
# 发送邮件或通知(需配置邮件服务)
fi
四、Shell进阶技巧
1. 数组操作
# 定义数组
songs=("Song1" "Song2" "Song3")
# 随机抽取元素
index=$((RANDOM % ${#songs[@]}))
echo "今日推荐歌曲:${songs[$index]}"
2. 算术运算
# 浮点数计算(保留2位小数)
echo "scale=2; 22/7" | bc # 输出3.14
# 随机数生成(1-100)
secret=$((RANDOM % 100 + 1))
五、总结
正则表达式与grep
、awk
、sed
是Linux运维的基石工具。通过脚本自动化,可显著提升日志分析、系统配置等任务的效率。
发布者:admin,转转请注明出处:http://www.yc00.com/web/1754861973a5209259.html
评论列表(0条)