网站建设项目说明书重庆观音桥好吃街
2026/1/15 15:03:44 网站建设 项目流程
网站建设项目说明书,重庆观音桥好吃街,wordpress修改用户名,深圳最大的企业排名CentOS Stream 9 的过滤器 —— 语法详解与实战案例系统环境#xff1a;CentOS Stream 9 / RHEL 9 核心工具#xff1a;grep, sed, awk, cut, wc, sort, uniq, Perl 目标#xff1a;掌握 Linux 文本处理全流程#xff0c;从基础过滤到高级编程一、简单过滤器#xff08;基…CentOS Stream 9 的过滤器 —— 语法详解与实战案例系统环境CentOS Stream 9 / RHEL 9核心工具grep, sed, awk, cut, wc, sort, uniq, Perl目标掌握 Linux 文本处理全流程从基础过滤到高级编程一、简单过滤器基础文本处理工具1.1 cat —— 连接并显示文件内容✅ 语法cat[选项][文件...]✅ 常用选项选项说明-n显示行号-b显示非空行的行号-s压缩连续空行-A显示所有字符包括不可见字符✅ 示例# 创建测试文件echo-eLine 1\n\nLine 3\n\nLine 5test.txt# 显示内容默认cattest.txt# 显示行号包括空行cat-n test.txt# 输出# 1 Line 1# 2# 3 Line 3# 4# 5 Line 5# 压缩空行并显示非空行号cat-sb test.txt# 输出# 1 Line 1# 2 Line 3# 3 Line 51.2 head / tail —— 查看文件开头/结尾✅ 语法head-n Nfile# 显示前N行tail-n Nfile# 显示后N行tail-ffile# 实时追踪文件末尾日志监控✅ 示例# 显示前3行head-n3/etc/passwd# 显示后5行tail-n5/var/log/messages# 实时监控日志按 CtrlC 退出tail-f /var/log/secure1.3 nl —— 添加行号比 cat -n 更灵活✅ 语法nl[选项][文件]✅ 常用选项选项说明-b a所有行编号包括空行-b t只对文本行编号默认-n ln行号左对齐-w N行号宽度为N✅ 示例nl-b a -nln-w3test.txt# 输出# 1 Line 1# 2# 3 Line 3# 4# 5 Line 51.4 tac —— 反向显示文件从最后一行开始✅ 语法tac[文件]✅ 示例echo-eA\nB\nCabc.txttacabc.txt# 输出# C# B# A1.5 rev —— 反转每行字符✅ 语法rev[文件]✅ 示例echoHello World|rev# 输出dlroW olleH# 反转 /etc/passwd 每行用于密码逆向分析慎用rev/etc/passwd|head-n31.6 wc —— 统计行数、字数、字符数✅ 语法wc[选项][文件]✅ 常用选项选项说明-l行数-w单词数-c字节数-m字符数支持UTF-8✅ 示例wc-l /etc/passwd# 统计行数wc-w /etc/group# 统计单词数wc-c /etc/hosts# 统计字节数wc-m /etc/issue# 统计字符数含中文# 统计多个文件wc-l *.log1.7 sort —— 排序✅ 语法sort[选项][文件]✅ 常用选项选项说明-n按数值排序-r逆序-k N按第N列排序-t C指定分隔符为C-u去重需先排序✅ 示例# 按字母排序echo-ebanana\napple\ncherry|sort# 输出apple, banana, cherry# 按数值排序echo-e10\n2\n100|sort-n# 输出2, 10, 100# 按第二列排序: 分隔sort-t: -k3n /etc/passwd|head-n51.8 uniq —— 去除相邻重复行必须先排序✅ 语法uniq[选项][文件]✅ 常用选项选项说明-c统计重复次数-d只显示重复行-u只显示唯一行✅ 示例echo-eA\nA\nB\nC\nC\nC|uniq-c# 输出# 2 A# 1 B# 3 C# 统计登录失败IP需先排序grepFailed password/var/log/secure|awk{print$11}|sort|uniq-c|sort-nr二、正则表达式Regular Expressions正则表达式是文本处理的核心广泛用于 grep/sed/awk/Perl 等工具。2.1 基本元字符元字符说明示例.任意单字符a.c→ abc, aXc^行首^root→ 以 root 开头的行$行尾bash$→ 以 bash 结尾的行*前字符0次或多次a*→ “”, “a”, “aaa”[abc]字符集合[aeiou]→ 匹配任意元音字母[^abc]非字符集合[^0-9]→ 非数字✅ 示例# 匹配以 # 开头的行注释grep^#/etc/ssh/sshd_config# 匹配以 .conf 结尾的行grep\.conf$/etc/rsyslog.conf2.2 特殊字符元字符需转义元字符说明示例\d数字 [0-9]\d{3}→ 三位数字\w字母数字下划线\w→ 单词\s空白字符\s→ 一个或多个空格/tab\b单词边界\broot\b→ 匹配单词 root不匹配 groot✅ 注意在基础 grep 中需使用\d等需-P参数Perl 正则或改用[0-9]2.3 POSIX 字符类兼容性好类说明等价[:digit:]数字[0-9][:alpha:]字母[a-zA-Z][:alnum:]字母数字[a-zA-Z0-9][:space:]空白字符[ \t\n\r\f\v][:upper:]大写字母[A-Z][:lower:]小写字母[a-z]✅ 示例# 匹配包含数字的行grep[[:digit:]]/etc/passwd# 匹配纯字母行grep^[[:alpha:]]*$file.txt2.4 重复量词扩展正则量词说明示例1次或多次a→ “a”, “aa”?0次或1次colou?r→ color, colour{n}恰好n次\d{4}→ 四位数字{n,}至少n次\d{3,}→ 至少三位数字{n,m}n到m次\d{2,4}→ 2~4位数字✅ 需使用grep -E或egrep# 匹配手机号11位数字grep-E^[1][3-9][0-9]{9}$phones.txt# 匹配IP地址简化版grep-E([0-9]{1,3}\.){3}[0-9]{1,3}access.log2.5 位置匹配锚点说明^行首$行尾\b单词边界\B非单词边界✅ 示例# 匹配独立单词 rootgrep\broot\b/etc/passwd# 匹配行首空格grep^ file.txt2.6 子表达式和分支语法说明(abc)子表达式分组a(bc)d✅ 示例# 匹配 color 或 colourgrep-Ecolou?rfile.txt# ? 方式grep-Ecol(o|ou)rfile.txt# 分支方式# 提取括号内内容需 sed/awkechoUser: (John Doe)|sed-ns/.*(\(.*\)).*/\1/p# 输出John Doe2.7 回调引用反向引用使用\1,\2… 引用前面的子表达式✅ 示例# 匹配重复单词如 the theechothe the cat|grep-E\b([a-z])\1\b# 交换两个单词echofirst second|seds/\([a-z]*\) \([a-z]*\)/\2\1/# 输出second first2.8 前后预查零宽断言仅 Perl 正则支持grep -P语法说明(?exp)正向先行断言后面是exp(?!exp)负向先行断言后面不是exp(?exp)正向后行断言前面是exp(?!exp)负向后行断言前面不是exp✅ 示例# 匹配后面跟着 .conf 的单词但不包含 .confechonginx.conf apache.conf|grep-oP\w(?\.conf)# 输出nginx, apache# 匹配前面是 /etc/ 的文件名echo/etc/passwd /tmp/file|grep-oP(?/etc/)\w# 输出passwd2.9 回调条件条件匹配Perl 正则高级功能(?(condition)yes-pattern|no-pattern)一般在 Perl 脚本中使用shell 中较少用。三、grep 正则表达式家族3.1 grep 语法✅ 基本语法grep[选项]模式[文件...]✅ 常用选项选项说明-i忽略大小写-v反向匹配不包含-n显示行号-c统计匹配行数-l只显示文件名-r递归搜索目录-E扩展正则等价 egrep-PPerl 正则功能最强-o只显示匹配部分3.2 grep 实例✅ 案例1搜索配置文件中的非注释非空行grep-v^#/etc/ssh/sshd_config|grep-v^$✅ 案例2统计访问日志中 404 错误次数grep 404 /var/log/nginx/access.log|wc-l✅ 案例3提取所有IP地址grep-oE([0-9]{1,3}\.){3}[0-9]{1,3}access.log|sort|uniq-c✅ 案例4查找包含 root 或 admin 的行忽略大小写grep-iEroot|admin/etc/passwd✅ 案例5查找前后有空格的单词 “error”grep-P(?\s)error(?\s)app.log四、sed 流编辑器4.1 sed 语法✅ 基本语法sed[选项]命令文件✅ 常用选项选项说明-n静默模式只输出p命令内容-i直接修改文件慎用-e多命令-f从脚本文件读取命令4.2 sed 内部命令命令说明示例p打印sed -n 2p file→ 打印第2行d删除sed 2d file→ 删除第2行s/pattern/repl/flags替换sed s/foo/bar/gg全局替换s///gi插入行前2i\New Linea插入行后2a\New Linec替换整行2c\New Content打印行号sed file!取反1!d→ 删除除第1行外所有行4.3 sed 实例✅ 案例1替换文件中所有 “old” 为 “new”seds/old/new/gfile.txt# -i 参数直接修改文件备份建议sed-i.baks/old/new/gfile.txt✅ 案例2删除空行sed/^$/dfile.txt✅ 案例3在匹配行后添加注释sed/^Listen /a # This is the main port/etc/httpd/conf/httpd.conf✅ 案例4提取括号内内容echoName: (John Doe), Age: (30)|sed-ns/.*(\([^)]*\)).*/\1/p# 输出John Doe 只匹配第一个# 提取所有echoName: (John Doe), Age: (30)|seds/[^()]*([^)]*)//g✅ 案例5多命令处理sed-es/foo/bar/g-e/^$/d-e1i\# Modified on $(date) file.txt五、Perl 一行式命令✅ 语法perl -ne命令文件# 逐行处理perl -pe命令文件# 逐行处理并打印perl -i -pe命令文件# 直接修改文件✅ 常用选项选项说明-n循环读入每行不自动打印-p循环读入每行自动打印-i修改文件-e执行命令-l自动处理换行符✅ 实例# 替换类似 sedperl -pes/foo/bar/gfile.txt# 删除空行perl -neprint unless /^$/file.txt# 提取IP使用正则perl -newhile(/(\d\.\d\.\d\.\d)/g){print $1\n}access.log# 统计单词频次perl -nefor$word(split) {$count{$word} } END { for$w(keys %count) { print $w:$count{$w}\n } }file.txt六、cut 抽取字段✅ 语法cut[选项][文件]✅ 常用选项选项说明-d C分隔符为C-f N第N个字段-c N-M第N到M个字符✅ 示例# 提取用户名和shell: 分隔cut-d: -f1,7 /etc/passwd# 提取第1-5字符cut-c1-5 /etc/hosts# 提取第2列到最后cut-d -f2- data.txt七、awk 编程7.1 awk 脚本基本结构✅ 语法awkpattern { action }file✅ 完整结构BEGIN { 初始化 } pattern { 每行处理 } END { 结束处理 }7.2 awk 的工作流程执行BEGIN块一次逐行读入文件匹配pattern执行action执行END块一次7.3 awk 内置变量预定义变量变量说明$0整行内容$1,$2...第1,2…字段NF字段数量NR当前行号全局FNR当前文件行号FS输入字段分隔符默认空格OFS输出字段分隔符默认空格RS输入记录分隔符默认换行ORS输出记录分隔符默认换行✅ 示例# 打印行号和字段数awk{print NR, NF,$0}/etc/passwd# 打印最后一列awk{print$NF}/etc/passwd# 打印倒数第二列awk{print$(NF-1)}/etc/passwd7.4 自定义变量awkBEGIN{sum0} {sum$1} END{print Total:, sum}data.txt7.5 将外部变量值传递给 awk✅ 方法1使用-vnameJohnawk-vuser$nameBEGIN{print Hello, user}✅ 方法2作为参数注意引号awkBEGIN{print Hello, ENVIRON[USER]}7.6 awk 运算与判断✅ 支持 - * / % ! || !✅ 示例# 计算大于100的数值之和awk$1 100 {sum $1} END{print sum}data.txt# 多条件判断awk$1 50 $2 100 {print$0}data.txt7.7 设置字段分隔符✅ 方法1-Fawk-F:{print$1}/etc/passwd✅ 方法2在 BEGIN 中设置FSawkBEGIN{FS:} {print$1}/etc/passwd✅ 方法3正则分隔符awk-F[ :]{print$1,$2}file.txt# 空格或冒号分隔7.8 流程控制语句✅ if-elseawk{if($1 50) print High; else print Low}data.txt✅ for 循环awkBEGIN{for(i1;i5;i) print i}✅ while 循环awkBEGIN{i1; while(i5) {print i; i}}7.9 数组的应用✅ 关联数组key-value# 统计每个用户的进程数ps-ef|awk{count[$1]} END{for(user in count) print user, count[user]}# 排序输出通过管道ps-ef|awk{count[$1]} END{for(user in count) print count[user], user}|sort-nr7.10 内置函数✅ 字符串函数函数说明length(str)长度substr(str, start, len)子串index(str, sub)查找位置tolower(str)转小写toupper(str)转大写✅ 数学函数函数说明int(x)取整sqrt(x)平方根rand()随机数✅ 示例# 提取域名echohttps://www.example.com/path|awk{print substr($0, index($0, //)2)}|awk-F/{print$1}# 转换大小写awk{print toupper($1)}file.txt八、综合性实战案例案例1Web 访问日志分析access.log目标统计访问IP、状态码、URL频次、流量TOP10✅ 假设日志格式192.168.1.100 - - [16/Sep/2025:10:00:01 0800] GET /index.html HTTP/1.1 200 1024✅ 脚本analyze-access.sh#!/bin/bashLOG/var/log/nginx/access.logecho TOP 10 IPs awk{print$1}$LOG|sort|uniq-c|sort-nr|head-10echo-e\n TOP 10 URLs awk{print$7}$LOG|sort|uniq-c|sort-nr|head-10echo-e\n Status Code Count awk{print$9}$LOG|sort|uniq-c|sort-nrecho-e\n TOP 10 Traffic (Bytes) awk$10~ /^[0-9]$/ {print$1,$7,$10}$LOG|sort-k3nr|head-10echo-e\n 404 Errors grep 404 $LOG|awk{print$7}|sort|uniq-c|sort-nr案例2系统用户审计报告目标生成用户列表UID1000、shell类型、家目录、最后登录✅ 脚本user-audit.sh#!/bin/bashechoUser Audit Report -$(date)echoawk-F:$3 1000 $3! 65534 { printf %-15s %-10s %-20s %s\n,$1,$3,$6,$7}/etc/passwdecho-e\nShell Summary:cut-d: -f7 /etc/passwd|sort|uniq-cecho-e\nLast Login:last|awkNF0 $1! reboot $1! wtmp {count[$1]; lastseen[$1]$4 $5 $6} END { for(user in count) { printf %s: %d times, last: %s\n, user, count[user], lastseen[user] } }|sort案例3自动化配置文件清理器目标删除注释和空行保留有效配置✅ 脚本clean-config.sh#!/bin/bashif[$#-eq0];thenechoUsage:$0config_fileexit1fiFILE$1BACKUP${FILE}.bak.$(date%Y%m%d)# 备份原文件cp$FILE$BACKUP# 清理删除空行和#开头的行允许行内注释grep-v^[[:space:]]*#$FILE|grep-v^[[:space:]]*$$FILE.tmp# 使用 awk 保留行内注释# 前有非空字符awk { # 如果行内有 # 且前面有非空字符则保留 # 前部分 if (match($0, /[^#[:space:]]#/)) { pos RSTART RLENGTH - 2 # # 前一个字符位置 print substr($0, 1, pos) } else if ($0!~ /^[[:space:]]*#/) { print$0} } $FILE.tmp$FILErm$FILE.tmpechoCleaned:$FILE(backup:$BACKUP)案例4日志实时监控 告警awk grep mail✅ 脚本monitor-log.sh#!/bin/bashLOG/var/log/messagesKEYWORDS(ERRORCRITICALFAILEDDENIED)EMAILadminexample.comtail-f$LOG|whilereadline;doforkwin${KEYWORDS[]};doifecho$line|grep-q$kw;thenecho[$(date)]$kwdetected:$line|mail -sALERT:$kwin$LOG$EMAILbreakfidonedone✅ 后台运行nohup./monitor-log.sh/tmp/monitor.log21✅ 本章小结 最佳实践组合使用grep | sort | uniq | awk是黄金组合正则优先复杂匹配用-PPerl 正则安全第一sed -i前先备份或使用-i.bak性能考虑大文件避免多次读取用 awk 一次处理可读性复杂 awk 脚本写成文件加注释调试技巧awk {print NR, $0}调试行号编码注意处理中文用LC_ALLC.UTF-8 附录命令速查表功能命令显示文件cat -n file前10行head -n 10 file后10行tail -n 10 file排序去重sort file提取列cut -d: -f1 /etc/passwd替换文本sed s/old/new/g file匹配IPgrep -oE ([0-9]{1,3}\.){3}[0-9]{1,3} file统计字段和awk {sum$1} END{print sum} file传递变量awk -v var$shell_var ... 扩展项目建议日志分析仪表盘awk gnuplot 生成图表配置文件版本对比diff awk 高亮差异自动化报表系统cron awk mail入侵检测脚本监控日志 自动封IP数据清洗管道grep sed awk sort uniq这份文档覆盖了 CentOS Stream 9 文本过滤器的全部核心知识点 语法细节 配置说明 实用脚本 综合项目所有配置和代码均含详细注释可直接用于教学、自学或生产环境参考。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询