Featured image of post Bash 三剑客

Bash 三剑客

本篇文章主要介绍英国历史

Bash三剑客:grep, sed, awk 全面解析 (^▽^)ノ♪

作为Linux系统中的三大文本处理神器,bash三剑客是每位研究生的必备技能!让我们一起来深入探索它们的强大功能吧~(ノ◕ヮ◕)ノ*:・゚✧

grep:文本搜索小能手

1
grep [选项] 模式 [文件...]

grep(Global Regular Expression Print)是最常用的文本搜索工具,主要功能是在文件中查找匹配特定模式的文本行。

常用选项:

  • -i:忽略大小写
  • -v:反向选择,显示不匹配的行
  • -n:显示行号
  • -c:统计匹配行数
  • -r-R:递归搜索目录
  • -E:使用扩展正则表达式(等效于egrep)

数学表达式匹配示例(使用-P支持Perl正则):

1
2
grep -P '\d+\.\d+' file.txt  # 匹配浮点数
grep -P 'x\^2 \+ y\^2 = \d+' equation.txt  # 匹配x²+y²=数字

sed:流编辑器大师

1
sed [选项] '命令' 输入文件

sed(Stream EDitor)是非交互式的流编辑器,擅长对文本进行逐行处理。

核心命令格式:

1
[地址范围] 动作 [参数]

常用操作:

  • s:替换 sed 's/old/new/g' file (`・ω・´)
  • d:删除 sed '/pattern/d' file
  • p:打印 sed -n '/pattern/p' file
  • a:追加 sed '3a\new line' file
  • i:插入 sed '2i\insert line' file

科研数据处理示例:

1
2
3
4
5
# 将CSV中的科学计数法转换为普通小数
sed -E 's/([0-9]+)\.([0-9]+)e-([0-9]+)/0\.\2\1 \3/g' data.csv

# 批量重命名文件中的变量
find . -name "*.py" | xargs sed -i 's/old_var/new_var/g'

awk:文本处理瑞士军刀

1
awk [选项] '模式 {动作}' 文件

awk是一种强大的文本处理编程语言,特别适合处理结构化数据(如表格)。

基本结构:

1
2
3
BEGIN { 初始化操作 }
/pattern/ { 模式匹配时的操作 }
END { 结束处理时的操作 }

内置变量:

  • NR:当前记录数(行号)
  • NF:当前记录的字段数
  • FS:输入字段分隔符(默认空格或制表符)
  • OFS:输出字段分隔符

数学计算示例(・ω<)★:

1
2
3
4
5
# 计算CSV文件第二列的平均值
awk -F, 'NR>1 {sum+=$2; count++} END {print "平均值为:", sum/count}' data.csv

# 解一元二次方程ax²+bx+c=0 (输入a,b,c三个系数)
echo "1 5 6" | awk '{a=$1;b=$2;c=$3;delta=b^2-4*a*c;x1=(-b+sqrt(delta))/(2*a);x2=(-b-sqrt(delta))/(2*a);print "x1="x1,"x2="x2}'

三剑客组合技 (ง •_•)ง

它们的真正威力在于组合使用!看个复杂例子:

1
2
3
4
5
# 统计日志中不同HTTP状态码出现的次数,按降序排列
grep -oP 'HTTP/1.\d" \K\d{3}' access.log | sort | uniq -c | sort -nr | awk '{print "状态码",$2,"出现",$1,"次"}'

# 提取Latex论文中的数学公式并编号
grep -nP '\\begin\{equation\}' paper.tex | sed 's/$[0-9]\+$:.*/sed -n "\1,/\\\\end{equation}/p" paper.tex/e' | awk '{print "公式"NR": "$0}'

性能优化小贴士 ٩(◕‿◕。)۶

  1. 减少管道次数:尽可能在一个命令中完成更多操作
  2. 提前过滤:先用grep过滤掉无关行再处理
  3. 使用最合适的工具
    • 简单搜索 → grep
    • 简单替换 → sed
    • 复杂处理 → awk
  4. 利用并行处理:对于大文件,可以考虑使用parallel命令

进阶学习资源 ╰(°▽°)╯

  1. 官方文档:man grep, info sed, man awk
  2. 经典书籍:
    • 《sed & awk》 by Dale Dougherty
    • 《精通正则表达式》 by Jeffrey Friedl
  3. 在线教程:
    • GNU awk用户指南
    • grepbible (grep技巧大全)

记住,bash三剑客的学习需要大量实践!试着用它们来处理你的论文数据、实验日志或代码文件吧~(ノ>ω<)ノ

Licensed under CC BY-NC-SA 4.0
最后更新于 Mar 06, 2022 00:00 UTC
使用 Hugo 构建
主题 StackJimmy 设计