一、grep命令
bash
grep -nE "class |def " xxx.py
grep -n -E "class |def " 文件
│ │ │ │ │
│ │ │ │ └─ 要搜索的文件
│ │ │ └─ 搜索什么
│ │ └─ 使用扩展正则表达式
│ └─ 显示行号
└─ 搜索文本
1.grep的核心作用就是:在文件中搜索包含某个字符串/模式的行。
例如:
bash
grep "class" hstu.py
就是找出 hstu.py 中所有包含 class 的行。
2.-n的作用是显示行号(line number)。
例如使用-n后得到:
bash
50:class RelativeAttentionBiasModule(torch.nn.Module):
65:class RelativePositionalBias(RelativeAttentionBiasModule):
225:class SequentialTransductionUnitJagged(torch.nn.Module):
448:class HSTUJagged(torch.nn.Module):
544:class HSTU(SequentialEncoderWithLearnedSimilarityModule):
这对我们学习源码特别有用。因为可以直接告诉你:SequentialTransductionUnitJagged 从第 225 行开始。然后你就可以:
bash
sed -n '225,447p' hstu.py
把这段拿出来用。
3.-E = Extended Regular Expression,扩展正则表达式。
刚才【grep -nE "class |def " hstu.py】,这里的【class |def】里面的 【| 】意思是:或者。
所以【grep -nE "class |def " hstu.py】相当于找出所有包含 class 或者 def 的行。
而不是执行两次:
grep -n "class" hstu.py
grep -n "def" hstu.py
二、sed -n 是干什么的?
例如:
bash
sed -n '225,447p' xxxx.py
这个命令可以理解成:把文件的第 225~447 行打印出来。
sed -n '225,447p' 文件
│ │ │ │
│ │ │ └─ 操作哪个文件
│ │ └─ 打印 225~447 行
│ └─ 不默认打印所有行
└─ 流编辑器
p是print(打印)
三、总结
源码学习时:
grep
↓
"帮我找东西在哪里"
↓
得到行号
↓
sed
↓
"把这一段代码拿出来给我看"