菜鸟科技网

Linux筛选命令有哪些常用技巧?

核心筛选命令

这些是筛选命令的基石,每个命令都有其独特的用途。

Linux筛选命令有哪些常用技巧?-图1
(图片来源网络,侵删)

grep - 文本搜索

grep (Global Regular Expression Print) 是最强大的文本搜索工具,它使用正则表达式来匹配文本。

基本语法:

grep [选项] '模式' 文件名...

常用选项:

  • -i: 忽略大小写。
  • -v: 反向选择,即打印不匹配的行。
  • -n: 显示匹配行的行号。
  • -c: 只输出匹配行的总数。
  • -E: 使用扩展正则表达式。
  • -w: 匹配整个单词。
  • -r-R: 递归搜索目录下的所有文件。

示例:

Linux筛选命令有哪些常用技巧?-图2
(图片来源网络,侵删)
# 1. 在文件中搜索包含 "error" 的行,并显示行号
grep -n 'error' system.log
# 2. 搜索不包含 "warning" 的行
grep -v 'warning' system.log
# 3. 在当前目录及其子目录中,递归搜索所有文件里包含 "TODO" 的行(忽略大小写)
grep -ri 'todo' .
# 4. 统计 "login" 关键词出现的次数
grep -c 'login' auth.log

sed - 流编辑器

sed (Stream Editor) 可以对输入的文本流进行编辑,如查找、替换、删除、插入等,它擅长对文本进行修改

基本语法:

sed [选项] '命令' 文件名...

常用命令:

  • s/旧文本/新文本/g: 全局替换。
  • d: 删除匹配的行。
  • p: 打印匹配的行(通常与 -n 选项一起使用)。
  • a\文本: 在匹配行后追加文本。
  • i\文本: 在匹配行前插入文本。

常用选项:

Linux筛选命令有哪些常用技巧?-图3
(图片来源网络,侵删)
  • -n: 静默模式,只打印被 p 命令处理的行。
  • -e: 允许在命令行中执行多个编辑命令。

示例:

# 1. 将文件中的 "old" 替换为 "new"
sed 's/old/new/g' filename.txt
# 2. 删除所有包含 "temp" 的行
sed '/temp/d' filename.txt
# 3. 只打印包含 "192.168.1" 的行(-n 和 p 配合使用)
sed -n '/192.168.1/p' /var/log/nginx/access.log
# 4. 在文件的第5行后插入一行新文本 "This is a new line"
sed '5a\This is a new line' filename.txt

awk - 文本处理工具

awk 是一个功能极其强大的报告生成工具,它逐行扫描文件,并将每行拆分为多个字段(默认以空格或制表符分隔)进行处理,它擅长基于进行筛选和计算。

基本语法:

awk [选项] '条件 {动作}' 文件名...
  • 条件: 可以是正则表达式、比较表达式(如 $1 > 100)等。
  • 动作: 可以是 print, printf, 算术运算等。
  • $0: 代表整行。
  • $1, $2, ...: 代表第一个字段、第二个字段,以此类推。

常用选项:

  • -F: 指定字段分隔符,如 -F:, -F,

示例:

# 假设 /etc/passwd 文件,字段由 ':' 分隔
# 1. 打印第1列(用户名)和第6列(家目录)
awk -F: '{print $1, $6}' /etc/passwd
# 2. 打印第3列(UID)大于1000的用户名和UID
awk -F: '$3 > 1000 {print $1, $3}' /etc/passwd
# 3. 打印包含 "/bin/bash" 的行的第1列
awk -F: '/\/bin\/bash/ {print $1}' /etc/passwd
# 4. 计算文件中第三列的总和
awk '{sum += $3} END {print sum}' data.txt

sort - 排序

sort 命令用于对文本文件的行进行排序。

常用选项:

  • -n: 按数值大小排序(默认是按字符排序)。
  • -r: 反向排序(降序)。
  • -k: 指定按哪一列进行排序。
  • -t: 指定字段分隔符。
  • -u: 去除重复的行。

示例:

# 1. 对文件内容按默认方式(字典序)排序
sort filename.txt
# 2. 按第三列的数值进行排序
sort -n -k3 filename.txt
# 3. 按第二列的反向(降序)排序
sort -r -k2 filename.txt
# 4. 对文件内容排序并去除重复行
sort -u filename.txt

uniq - 去重

uniq 通常与 sort 结合使用,用于相邻行的去重,它必须先对文件进行排序。

常用选项:

  • -i: 忽略大小写。
  • -d: 只显示重复的行。
  • -u: 只显示不重复的行。

示例:

# 1. 先排序,再去除相邻的重复行
sort filename.txt | uniq
# 2. 统计每一行出现的次数
sort filename.txt | uniq -c
# 3. 只显示那些在文件中出现超过一次的行
sort filename.txt | uniq -d

cut - 切割列

cut 用于从文本行中提取特定的列或字符。

常用选项:

  • -d: 指定字段分隔符。
  • -f: 指定要提取的字段(列)。
  • -c: 按字符切割,而不是按字段。

示例:

# 假设文件内容用逗号分隔
# 1. 提取第1列和第3列
cut -d',' -f1,3 data.csv
# 2. 提取第2到第4个字符
echo "abcdef" | cut -c2-4

命令组合与管道

真正的威力在于将它们组合起来,管道符 是连接它们的灵魂。

组合模式:命令1 | 命令2 | ... | 命令N

  • cat file.txt | ...: 将文件内容作为标准输入传递给下一个命令。
  • command | ...: 将一个命令的输出作为另一个命令的输入。

示例组合:

# 场景:从系统日志中,找出 "ERROR" 级别的日志,并按时间排序,统计每种错误出现的次数
cat /var/log/syslog | grep 'ERROR' | sort | uniq -c | sort -nr
# 解读:
# 1. cat /var/log/syslog: 读取日志文件
# 2. | grep 'ERROR': 筛选出包含 "ERROR" 的行
# 3. | sort: 对错误行进行排序,为 uniq 做准备
# 4. | uniq -c: 统计每个错误出现的次数
# 5. | sort -nr: 按数字(-n)降序(-r)排列,显示最常见的错误

实战案例

假设我们有一个 web_access.log 文件,内容如下:

168.1.100 - - [10/Oct/2025:13:55:36 +0800] "GET /index.html HTTP/1.1" 200 2326
192.168.1.101 - - [10/Oct/2025:13:56:01 +0800] "POST /login HTTP/1.1" 200 512
10.0.0.5 - - [10/Oct/2025:13:56:15 +0800] "GET /admin/dashboard HTTP/1.1" 404 1024
192.168.1.100 - - [10/Oct/2025:13:57:10 +0800] "GET /images/logo.png HTTP/1.1" 200 15432
10.0.0.5 - - [10/Oct/2025:13:57:45 +0800] "GET /robots.txt HTTP/1.1" 404 1024

案例1:找出所有访问 /admin/dashboard 的IP地址

grep '/admin/dashboard' web_access.log | awk '{print $1}'
# 输出:
# 10.0.0.5

案例2:找出所有状态码为 404 的请求,并统计每个IP的404次数

grep ' 404 ' web_access.log | awk '{print $1}' | sort | uniq -c
# 输出:
#       2 10.0.0.5

案例3:找出所有访问量最大的IP地址(总访问次数)

awk '{print $1}' web_access.log | sort | uniq -c | sort -nr | head -n 1
# 输出:
#       2 192.168.1.100

案例4:将日志按IP地址分组,并显示每个IP的首次访问时间

# 这是一个更复杂的awk脚本
awk '{ips[$1]++; first_time[$1] = $4} END {for (ip in ips) print ip, "访问次数:", ips[ip], "首次访问:", first_time[ip]}' web_access.log
# 输出(顺序可能不同):
# 192.168.1.100 访问次数: 2 首次访问: [10/Oct/2025:13:55:36
# 192.168.1.101 访问次数: 1 首次访问: [10/Oct/2025:13:56:01
# 10.0.0.5 访问次数: 2 首次访问: [10/Oct/2025:13:56:15
命令 主要用途 核心特点
grep 搜索 根据模式匹配行,功能强大,正则表达式支持好。
sed 编辑 修改文本,擅长替换、删除、插入。
awk 处理/报告 按列处理,支持编程逻辑,功能最强大。
sort 排序 对行进行排序,可指定列和分隔符。
uniq 去重 去除相邻的重复行,通常配合 sort 使用。
cut 切割 简单地按列或字符提取数据。

掌握这些命令,并学会用 将它们串联起来,你就能像使用瑞士军刀一样,高效地处理任何文本数据。

分享:
扫描分享到社交APP
上一篇
下一篇