linux文本处理常用命令

linux文本处理常用命令

grep

  • 基础筛选关键字
1
grep "error" log.txt
  • 忽略大小写
1
grep -i "error" log.txt
  • 显示行号
1
grep -n "fail" log.txt
  • 递归搜索目录
1
grep -r "OCPP" ./
  • 反选(排除)
1
grep -v "DEBUG" log.txt
  • 显示匹配行的前后上下文
1
grep -C 5 "ERROR" log.txt     # 前后各5行
  • 统计匹配次数
1
grep -c "ERROR" log.txt
  • 只打印匹配部分(提取字段/ID)
1
grep -o "ID=[0-9]\+" log.txt
  • 使用扩展正则(少打反斜杠)
1
grep -E "ERROR|WARN" log.txt
  • 精确匹配整词(避免误匹配)
1
grep -w "fail" log.txt
  • 固定字符串匹配
    -F 避免输入的文本被当做正则表达式进行解析:
1
grep -F "literal.text[1]" log.txt

sed

  • 字符串替换(全局)
1
sed 's/old/new/g' file.txt
  • 只替换第3行
1
sed '3s/old/new/' file.txt
  • 删除空行
1
sed '/^$/d' file.txt
  • 删除第1到5行
1
sed '1,5d' file.txt
  • 原地修改文件(谨慎使用)
1
sed -i 's/foo/bar/g' file.txt
  • 带备份的原地替换(更安全)
1
sed -i.bak 's/foo/bar/g' file.txt
  • 打印第 N 行
1
sed -n '10p' file.txt
  • 只替换首次出现(每行仅第1个)
1
sed 's/foo/bar/' file.txt
  • 去掉行尾空白
1
sed 's/[[:space:]]\+$//' file.txt

awk

  • 按列输出
1
awk '{print $1,$3}' file.txt
  • 指定分隔符(CSV)
1
awk -F, '{print $2}' data.csv
  • 条件过滤
    筛选出“第3列大于100”的所有行并输出:
1
awk '$3 > 100 {print}' file.txt
  • 统计行数
1
awk 'END{print NR}' file.txt
  • 求和统计
    把第2列所有数字加起来,最后输出总和:
1
awk '{sum+=$2} END{print sum}' data.txt
  • 打印行号 + 整行
1
awk '{print NR, $0}' file.txt
  • 指定输出分隔符
1
awk 'BEGIN{OFS=","} {print $1,$3}' file.txt
  • 按条件统计行数
1
awk '$3>100 {cnt++} END{print cnt}' file.txt
  • 求平均值
1
awk '{sum+=$2; n++} END{if(n>0) print sum/n; else print 0}' data.txt

cut

  • 按空格切列
1
cut -d' ' -f1 file.txt
  • 按冒号分隔
    只显示使用冒号分割的内容的第一列:
1
cut -d: -f1 /etc/passwd
  • 提取第2到4列
1
cut -d',' -f2-4 data.csv
  • 按字符位置截取
    截取每一行的第 1 到第 10 个字符并输出:
1
cut -c1-10 file.txt
  • 输出“除了第1列之外”的剩余列
1
cut -d, -f2- data.csv

sort

  • 默认排序
    默认排序规则:每行数据,从第1个字符开始比较,按字符的ASCII码顺序,逐字符比较
1
sort file.txt
  • 数字排序
1
sort -n data.txt
  • 反向排序
1
sort -r file.txt
  • 去重排序
1
sort -u file.txt
  • 按指定列排序(指定分隔符+列范围)
    按逗号分列,先按第2列排序(字符串),如果第2列相同,再按第3列做数字排序:
    -t, 表示用逗号作为分隔符
    -k2,2 表示用 第2列 → 第2列 作为排序键,即按第2列排序
    -k3,3n 表示用 第3列 → 第3列 作为排序键,即按第3列排序,并且做数字排序
1
sort -t, -k2,2 -k3,3n data.csv
  • 指定分隔符/按指定列排序
    用冒号分列,从第 2 列开始,一直到最后一列,作为排序键,并按数字排序:
    -t: 表示用冒号作为分隔符
    -n 表示数字排序
1
sort -t: -k2,2n log_data.txt

假设文本内容是:

1
2
3
4
DataType: 2
TotalCount: 127
TotalPages: 3
CurrentPage: 0

排序之后的结果是:

1
2
3
4
CurrentPage: 0
DataType: 2
TotalPages: 3
TotalCount: 127
  • 使用稳定排序(多关键字排序时建议)
1
sort -s -k1,1 -k2,2n file.txt

uniq

  • 去重(需先排序)
1
sort file.txt | uniq
  • 统计重复次数
1
sort file.txt | uniq -c
  • 只显示重复行
1
sort file.txt | uniq -d
  • 只显示唯一行(不重复的行)
1
sort file.txt | uniq -u

wc

  • 统计行数
1
wc -l file.txt
  • 统计单词数
1
wc -w file.txt
  • 统计字符数
1
wc -c file.txt

tail

  • 查看最后10行
1
tail file.txt
  • 实时查看日志
1
tail -f log.txt
  • 查看最后100行
1
tail -n 100 log.txt
  • 从第 N 行开始输出到末尾
1
tail -n +100 file.txt
  • 查看前10行
1
head file.txt
  • 查看前50行
1
head -n 50 file.txt

tr

  • 小写转大写
1
echo abc | tr a-z A-Z
  • 删除指定字符
1
tr -d '\r' < file.txt
  • 压缩重复字符
    把连续出现的多个空格,压缩成一个空格:
1
tr -s ' ' < file.txt
  • 统一 Windows 换行符
1
tr -d '\r' < file.txt > file_unix.txt
  • 替换 Tab 为单个空格
1
tr '\t' ' ' < file.txt