Linux 文本处理中 grep、sed、awk 命令的常用用法和正则表达式有哪些?
Linux 文本处理是系统管理和数据分析的重要技能,掌握这些工具可以大大提高工作效率。grep(文本搜索):基本用法:grep "pattern" file常用选项:-i:忽略大小写-v:反向匹配(显示不匹配的行)-n:显示行号-c:统计匹配行数-r:递归搜索目录-l:只显示包含匹配的文件名-A n:显示匹配行及其后 n 行-B n:显示匹配行及其前 n 行-C n:显示匹配行及其前后各 n 行正则表达式:grep -E "pattern1|pattern2" file(扩展正则)示例:grep -rn "error" /var/log(递归搜索日志中的错误)sed(流编辑器):基本用法:sed 'command' file常用命令:s/pattern/replacement/:替换(只替换第一个匹配)s/pattern/replacement/g:全局替换(替换所有匹配)d:删除行p:打印行n:读取下一行常用选项:-i:直接修改文件-n:抑制自动输出-e:执行多个命令示例:sed 's/old/new/g' file(全局替换)sed '/pattern/d' file(删除匹配的行)sed -i 's/foo/bar/g' file(直接修改文件)awk(文本处理工具):基本用法:awk 'pattern {action}' file内置变量:$0:整行$1, $2, …:第1、2、…个字段NF:字段总数NR:当前行号FNR:当前文件的行号FS:字段分隔符(默认空格)OFS:输出字段分隔符RS:记录分隔符(默认换行符)ORS:输出记录分隔符常用函数:print:打印printf:格式化输出length():字符串长度substr():子字符串split():分割字符串gsub():全局替换示例:awk '{print $1}' file(打印第一个字段)awk -F: '{print $1, $3}' /etc/passwd(以冒号为分隔符)awk 'NR==1,NR==10' file(打印第1-10行)awk '{sum+=$1} END {print sum}' file(计算第一列总和)cut(剪切工具):基本用法:cut [options] file常用选项:-d:指定分隔符-f:指定字段-c:指定字符位置示例:cut -d: -f1 /etc/passwd(以冒号为分隔符,提取第一个字段)cut -c1-10 file(提取每行的前10个字符)sort(排序工具):基本用法:sort [options] file常用选项:-n:按数值排序-r:倒序-k:指定排序字段-t:指定分隔符-u:去重示例:sort -n -k2 file(按第二列数值排序)sort -t: -k3 -n /etc/passwd(按第三列数值排序)uniq(去重工具):基本用法:uniq [options] file常用选项:-c:统计重复次数-d:只显示重复的行-u:只显示不重复的行示例:sort file | uniq -c(排序后统计重复次数)组合使用:统计日志中错误数量:grep "error" log | wc -l查找访问量最高的 IP:awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10提取文件中的邮箱:grep -Eo '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}' file