我是新来的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所以我需要导出这一行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会更好
谢谢你的回答
发布于 2021-11-12 13:28:51
有几个选项,但您还没有定义清楚的标准-所以我主要是在这里猜测。
如果您需要的输出始终位于文件的底部,则可以使用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发布于 2021-11-12 14:01:52
假设您希望使用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.txthttps://askubuntu.com/questions/1375080
复制相似问题