01. grep 命令
grep 说白了就是「文本搜索机」——在一堆文字里找你想要的行。名字挺古怪(Global Regular Expression Print),但用法超简单。你查日志、翻代码、找配置项,grep 都是第一选择:
bash
grep "error" /var/log/syslog # 搜包含 error 的行
grep -i "error" file # 不管大小写都搜出来
grep -r "pattern" /path/ # 在目录里翻个底朝天
grep -n "error" file # 显示行号,方便定位
grep -c "error" file # 只告诉你匹配了几行
grep -v "debug" file # 排除含 debug 的行
grep -l "pattern" *.log # 只列文件名,不显内容
grep -A 3 "error" file # 匹配行 + 后面 3 行,看上下文
grep -B 2 "error" file # 匹配行 + 前面 2 行
grep -E "err|warn|crit" file # 一次搜多个词(扩展正则)
grep -P "d{3}-d{4}" file # Perl 正则,威力翻倍02. sed 命令
sed 是个流编辑器,你可以理解成「批量查找替换工具」——不需要打开文件,一键把旧内容换成新内容。处理几十 MB 的日志也不在话下:
bash
sed 's/old/new/' file # 每行第一个 old 换成 new
sed 's/old/new/g' file # 每行所有 old 全换
sed -i 's/old/new/g' file # 直接改原文件,注意没有回头路
sed -i.bak 's/old/new/g' file # 改之前先备份原文件为 .bak
sed '3d' file # 删掉第 3 行
sed '/pattern/d' file # 删掉含 pattern 的行
sed '2a
ew line' file # 在第 2 行后面插入一行
sed '2i
ew line' file # 在第 2 行前面插入一行
sed -n '5,10p' file # 只看第 5 到第 10 行
sed 's/^/ /' file # 每行前面加 4 个空格(缩进)sed -i 会直接改写文件,养成加 .bak 后缀的好习惯,万一改错了还能找回原文件。
03. awk 命令
awk 是文本处理界的瑞士军刀——它把每行按空格(或你指定的分隔符)切成一个个字段,然后你可以对这些字段做加减乘除、统计、过滤。相当于命令行的 Excel:
bash
awk '{print $1}' file # 打印第 1 列
awk '{print $1, $3}' file # 打印第 1 和第 3 列
awk -F: '{print $1}' /etc/passwd # 用冒号当分隔符
awk '/error/ {print}' file # 打印含 error 的行
awk 'NR==5' file # 只看第 5 行
awk 'NR>=5 && NR<=10' file # 看第 5 到第 10 行
awk '{sum+=$1} END {print sum}' file # 第 1 列求和
awk '{print NR, $0}' file # 行号 + 内容
awk -F: '$3>=1000 {print $1}' /etc/passwd # 第 3 列 >= 1000 才打印第 1 列
awk '{count[$1]++} END {for(k in count) print k, count[k]}' file # 统计每项出现次数04. sort 与 uniq
排序和去重是数据分析的基本功,sort 和 uniq 是绝佳搭档:
bash
sort file # 按字母排序
sort -r file # 反过来排
sort -n file # 按数字大小排(不用 -n 的话 10 会排在 2 前面!)
sort -k2 file # 按第 2 列来排
sort -t: -k3 -n /etc/passwd # 冒号分隔,按第 3 列数字排
sort file | uniq # 去重(先排序再去重,搭配使用)
sort file | uniq -c # 去重 + 统计出现次数
sort file | uniq -d # 只看重复出现的行
sort file | sort | uniq -c | sort -rn # 词频排行榜05. 管道与重定向
管道 | 是 Linux 的设计精髓——把前一个命令的输出直接喂给下一个命令的输入,像流水线一样。重定向 > 和 >> 则控制输出去哪儿。这两个概念搞懂了,Linux 功力直接翻倍:
bash
command > file # 输出写到 file(覆盖原有内容)
command >> file # 输出追加到 file 末尾
command 2> file # 只把错误信息写到 file
command &> file # 不管正常还是错误,全写进去
command < file # 从 file 读输入
cat file | grep "error" | wc -l # 数数文件里有多少行带 error
ps aux | grep nginx | grep -v grep # 找 nginx 进程,去掉 grep 自己
cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10 # 统计访问最多的 10 个 IP管道就是把简单命令串成流水线。每个命令只做一件事但做到极致,串起来威力无穷。
知识测验
第 1/5 题正确 0
grep -i 选项的作用是?
下一节
下一节 用户与权限管理