admin管理员组文章数量:1130349
# 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运维的基石工具。通过脚本自动化,可显著提升日志分析、系统配置等任务的效率。
# 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运维的基石工具。通过脚本自动化,可显著提升日志分析、系统配置等任务的效率。
版权声明:本文标题:文本三剑客以及一键安装类脚本编写 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://it.en369.cn/jiaocheng/1754861973a2735502.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论