我是 Bash 脚本的新手。我尝试编写脚本来检查设备(tp-link、cisco、lynksys...)是否通过 telnet 连接并获取一些信息。
因此第一个脚本运行没有问题:
#!/bin/sh
NOW=$(date +"%m-%d-%Y")
HOST='IPADDRES'
USER='USER'
PASSWD='PASSWORD'
CMD='enable'
CMD2='show mac address-table'
CMD3='terminal length 0'
(echo "$HOST - " ; (
echo open "$HOST"
sleep 1
echo "$USER"
sleep 1
echo "$PASSWD"
sleep 1
echo "$CMD"
sleep 1
echo "$CMD3"
sleep 1
echo "$CMD2\n"
sleep 30
echo "exit"
) | telnet ) > name.$NOW.txt
当我制作时:cat name.date.txt
我得到了这个结果
hostname1 -
telnet> Trying hostname1...
Connected to hostname1.
Escape character is '^]'.
User Access Verification
Username:
Password:
Welcome to BDCOM P3310C EPON OLT
hostname1>enable
hostname1#terminal length 0
hostname1#show mac address-table
Mac Address Table (Total 311)
------------------------------------------
Vlan Mac Address Type Ports
---- ----------- ---- -----
All 8479.735b.9132 STATIC CPU
300 44d9.e776.d8b7 DYNAMIC g0/3
300 4c5e.0cff.6dea DYNAMIC g0/3
300 d4ca.6d9e.3280 DYNAMIC g0/3
所以我只需要导出这一行 1、2 和 4,如下所示:
300 44d9.e776.d8b7 DYNAMIC g0/3
300 4c5e.0cff.6dea DYNAMIC g0/3
300 d4ca.6d9e.3280 DYNAMIC g0/3
“Vlan Mac 地址类型端口”之前不需要任何内容
所以我写了这个脚本:
cat name.date.txt | awk '$1<"ALL"{print $1" ",$2" ",$3" ",$4}'
我得到了这个结果:
hostname1 -
-----------------------------
---- ----------- ---- -----
300 44d9.e776.d8b7 DYNAMIC g0/3
300 0002.9b80.7f28 DYNAMIC g0/3
300 0002.9b65.7b66 DYNAMIC g0/3
300 4c5e.0cff.6dea DYNAMIC g0/3
300 d4ca.6d9e.3280 DYNAMIC g0/3
修复谁?
我只导出以下信息的文件:
300 44d9.e776.d8b7 DYNAMIC g0/3
300 0002.9b80.7f28 DYNAMIC g0/3
300 0002.9b65.7b66 DYNAMIC g0/3
300 4c5e.0cff.6dea DYNAMIC g0/3
300 d4ca.6d9e.3280 DYNAMIC g0/3
如果我可以导出到表格或 csv 就更好了
感谢回答
答案1
假设您想使用 awk 打印从$1
等于All
到文件末尾的行:
awk '$1=="All" {p=1; next} p' name.date.txt
(next
如果要包含匹配的行,请省略)。
为了使输出以逗号分隔,请将输出字段分隔符设置为“,”并通过评估强制重建记录,$1=$1
例如:
awk '$1=="All" {p=1; OFS=","; next} p {$1=$1; print}' name.date.txt
答案2
有几个选项,但你还没有定义明确的标准 - 所以我在这里主要是猜测。
如果您需要的输出始终位于文件底部,则可以使用tail
获取最后 X 行,例如:
tail -n 6 name.date.txt
... 将为您提供最后 6 行(表格)。
Vlan Mac Address Type Ports
---- ----------- ---- -----
All 8479.735b.9132 STATIC CPU
300 44d9.e776.d8b7 DYNAMIC g0/3
300 4c5e.0cff.6dea DYNAMIC g0/3
300 d4ca.6d9e.3280 DYNAMIC g0/3
另一个选项是用来grep
搜索模式,例如:
grep 'STATIC\|DYNAMIC' name.date.txt
STATIC
... 将匹配包含单词或 的行DYNAMIC
。
All 8479.735b.9132 STATIC CPU
300 44d9.e776.d8b7 DYNAMIC g0/3
300 4c5e.0cff.6dea DYNAMIC g0/3
300 d4ca.6d9e.3280 DYNAMIC g0/3