乐闻世界logo
搜索文章和话题

Linux 文本处理中 grep、sed、awk 命令的常用用法和正则表达式有哪些?

2月17日 23:37

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
标签:Linux