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
4DataType: 2
TotalCount: 127
TotalPages: 3
CurrentPage: 0排序之后的结果是:
1
2
3
4CurrentPage: 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
head
查看前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























































