https://gitee.com/Tele-AI/tele-chat
当你可以和不确定性安然共处时,
无限的可能性就在生命中展开了。
——艾克哈特·托尔《新世界》
以下这些操作不用刻意去背或记,只要多加练习,自然而然就会用。我这里只挑常用的参数,更详细的参数,大家可以自行搜索查阅。
grep
用于搜索文件中匹配特定模式的行。
-i
:忽略大小写-v
:反转匹配,只显示不匹配的行-c
:计数匹配的行数-n
:显示匹配的行号-r
:递归搜索目录中的所有文件-E
:使用扩展正则表达式常用示例:
查找文件中包含"error"的行(不区分大小写):
grep -i "error" filename.txt
计算文件中不包含"warning"的行数:
grep -v -c "warning" filename.txt
在当前目录及子目录中递归搜索包含"main()"函数定义的C源代码文件:
grep -r "int main()" .
awk
是一个功能强大的文本分析工具,主要用于数据抽取和报告生成。
-F
:设置输入字段分隔符-v
:设置变量NR
:当前记录号(通常是行号)NF
:当前记录的字段数(列数)$0
:整个当前记录常用示例:
打印文件第一列和第三列的内容:
awk '{print $1, $3}' filename.txt
将逗号作为字段分隔符,打印每一行的第二列:
awk -F, '{print $2}' filename.csv
计算文件中所有行的第一列之和:
awk '{sum += $1} END {print sum}' filename.txt
sed
是一个流编辑器,用于执行基本的文本转换。
-i
:直接修改文件内容(谨慎使用)-e
:允许多个编辑指令s/regexp/replacement/
:替换文本d
:删除p
:打印g
:全局替换标记常用示例:
将文件中的"oldtext"替换为"newtext":
sed 's/oldtext/newtext/' filename.txt
删除文件中所有空白行:
sed '/^$/d' filename.txt
将文件中所有的"foo"替换成"bar"并直接修改文件(谨慎使用):
sed -i 's/foo/bar/g' filename.txt
熟能生巧,经常使用并且总结为自动化脚本一定可以事半功倍。
grep
可以使用强大的正则表达式来进行模式匹配。
-o
:仅输出文件中匹配到的部分。-A n
:打印匹配行及其后n行。-B n
:打印匹配行及其前n行。-C n
:打印匹配行及其前后各n行。自动化脚本示例:
#!/bin/bash
# 搜索日志文件中包含 "ERROR" 的条目,并且输出错误及其前后两行的内容
grep -C 2 'ERROR' /var/log/application.log > error_context.log
# 检查系统是否存在未授权的SSH登录尝试
grep 'Failed password' /var/log/auth.log | grep -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' > suspected_ips.txt
awk
可以执行复杂的文本处理任务,比如条件语句、循环、数组等。
BEGIN
:在处理任何输入行之前执行的操作。END
:在处理完所有输入行之后执行的操作。/pattern/ {action}
:对匹配模式的行执行操作。length($0)
:返回整行的长度。自动化脚本案例:
#!/bin/bash
# 分析Web服务器的日志文件,输出访问最频繁的10个IP
awk '{print $1}' /var/log/httpd/access_log | sort | uniq -c | sort -nr | head -10
sed
可以进行复杂的文本编辑操作,如插入、追加、替换多行文本等。
n~m
:每m行匹配一次,从第n行开始。&
:在替换字符串中引用匹配的部分。-n
与 p
结合使用:仅打印那些发生替换的行。自动化脚本案例:
#!/bin/bash
# 批量修改配置文件,将所有的 "localhost" 替换为 "127.0.0.1" 并备份原文件
sed -i.bak 's/localhost/127.0.0.1/g' /etc/application/config.cfg
# 删除CSS文件中的所有注释
sed -i '/\/\*/,/\*\//d' style.css
#!/bin/bash
# 实时监控指定日志文件的更新,一旦出现关键词 "CRITICAL ERROR",就发送一封警告邮件
tail -Fn0 /var/log/application.log | \
while read line ; do
echo "$line" | grep "CRITICAL ERROR" &> /dev/null
if [ $? = 0 ]; then
echo "$line" | mail -s "Critical Error Detected" admin@example.com
fi
done
#!/bin/bash
# 列出当前目录及子目录下所有超过100MB的文件
find . -type f -size +100M -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'
#!/bin/bash
# 分析Apache访问日志,按页面访问次数排序输出
awk '{print $7}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -10
#!/bin/bash
# 在特定目录下,将所有.txt文件更改为.md文件
for file in /path/to/directory/*.txt; do
mv "$file" "${file%.txt}.md"
done
#!/bin/bash
# 提取日志文件中的IP地址,并统计每个IP出现的次数,输出最常见的10个IP
grep -oE '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b' /var/log/httpd/access_log | sort | uniq -c | sort -nr | head -10
#!/bin/bash
# 监控日志文件的增长,并为新的日志条目添加时间戳和格式化输出
tail -Fn0 /var/log/application.log | \
while read line ; do
echo "$(date "+%Y-%m-%d %H:%M:%S") - $line" >> formatted_application.log
done
运维工程师通常使用grep
、awk
、sed
等工具来快速解决日常任务,如日志分析、系统监控、自动化部署等。以下是一些包含grep
、awk
、sed
的shell脚本案例,这些案例反映了运维工程师的常见用途。
#!/bin/bash
# 监控web服务器的日志文件,记录所有非200状态码的HTTP请求
tail -Fn0 /var/log/httpd/access_log | while read line; do
echo "$line" | grep -v '" 200 ' | awk '{print $9}' | while read status; do
if [ "$status" != "200" ]; then
echo "$line" | awk '{print $1, $9}' >> /var/log/httpd/error_requests.log
fi
done
done
#!/bin/bash
# 提取昨天的日志条目
log_file="/var/log/application.log"
start_time=$(date -d "yesterday 00:00" '+%b %_d %H:%M')
end_time=$(date -d "yesterday 23:59" '+%b %_d %H:%M')
awk -v start="$start_time" -v end="$end_time" \
'$0 ~ start, $0 ~ end' $log_file > /var/log/application_yesterday.log
#!/bin/bash
# 分析磁盘使用情况,如果超出阈值则发送报告
disk_usage=$(df -h | awk '$NF=="/"{print $(NF-1)}')
max_usage=90%
if [ "${disk_usage%?}" -ge "${max_usage%?}" ]; then
df -h | mail -s "Disk Usage Alert" admin@example.com
fi
#!/bin/bash
# 备份配置文件,然后替换文件中的一些旧参数值
config_file="/etc/application/config.cfg"
backup_file="/etc/application/config.cfg.bak"
cp $config_file $backup_file
sed -i 's/old_parameter/new_parameter/g' $config_file
#!/bin/bash
# 过滤日志文件中的错误模式,并统计它们的发生次数
log_file="/var/log/application.log"
pattern="ERROR"
grep -c $pattern $log_file
在使用这些脚本之前,应该测试和验证脚本的正确性,以避免在生产环境中出现问题。如果以上内容对你有用,别忘了收藏加关注哦!