前言
最近有个需求,核查对比多台网络设备的配置,需要将设备配置文件中的关键信息(比如:设备的带外地址、Loopback地址等)提取出来。
举个例子:
某台设备的配置文件如下,我想查找该设备Loopback0地址:
一个文本文件的话,我们直接用notepad/notepad ++ 直接Ctrl + F
Loopback0
,找到Loopback0
下面2
行即可找到其地址,但是当多个文件时,再一个个找就很麻烦了。
为了方便高效,又懒得用Python
写脚本遍历查找(一是Python
能力有限,逻辑处理复杂,二是当时时间紧急,着急核查配置),想到了用Linux里面的grep
命令直接操作,后面又想到Windows平台有没有类似的命令呢,于是一番查找资料,发现Windows上使用Powershell里面的Select-String
也可以实现类似的功能。
经过实验,都可以完美满足我的需求,现分享给大家。
一、Linux 环境使用 grep
实现需求
Linux环境这里为了方便,没装虚拟机,用的是Cygwin
(Cygwin是一款可以在Windows上模拟Linux环境的工具),只用来练习Linux上面的命令完全够用。
grep
命令就不多说了,Linux 平台上很强大的查找命令,参数很多,详细参数可输入 grep --help
查看命令使用帮助,更详细的使用方法可 man grep
查看 。这里只介绍和我的需求相关的两个参数:
-A
打印后面 n 行上下文, n是参数-B
打印前面 n 行上下文,n是参数
我的需求其实很简单,还是以查找Loopback0
地址为例,直接用grep -A
命令查看上下文几行就满足了。
- 防止出现干扰项,关键字加上正则
^
, 表示查找以interface LoopBack0
开头的文本,我们只要关键字后面2行的上下文内容,因此参数就是-A 2
,后面直接跟关键字和文件路径,这里的话文件就在当前目录下,因此直接写文件名(可用通配符过滤&#