首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用bash获得正确的文本

如何使用bash获得正确的文本
EN

Ask Ubuntu用户
提问于 2021-11-12 11:34:36
回答 2查看 126关注 0票数 0

我是新来的bash脚本。我试着制作检查设备的脚本( tp-link,cisco,lynksys).)通过telnet连接并获得一些信息。

因此,第一个脚本的工作没有问题:

代码语言:javascript
复制
#!/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,我得到了这个结果

代码语言:javascript
复制
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,如下所示:

代码语言:javascript
复制
300     44d9.e776.d8b7    DYNAMIC    g0/3
300     4c5e.0cff.6dea    DYNAMIC    g0/3
300     d4ca.6d9e.3280    DYNAMIC    g0/3

在"Vlan Mac地址类型端口“之前,我不需要任何东西。

所以我制作了这个剧本:

代码语言:javascript
复制
cat name.date.txt | awk '$1<"ALL"{print $1"    ",$2"    ",$3"  ",$4}'

我得到了这个结果:

代码语言:javascript
复制
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

该修理谁?

我只是导出文件,只有以下信息:

代码语言:javascript
复制
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会更好

谢谢你的回答

EN

回答 2

Ask Ubuntu用户

回答已采纳

发布于 2021-11-12 13:28:51

有几个选项,但您还没有定义清楚的标准-所以我主要是在这里猜测。

如果您需要的输出始终位于文件的底部,则可以使用tail获取最后的X行,例如:

代码语言:javascript
复制
tail -n 6 name.date.txt 

..。会给你最后6行(表)。

代码语言:javascript
复制
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搜索模式,例如:

代码语言:javascript
复制
grep 'STATIC\|DYNAMIC' name.date.txt

..。将匹配包含单词STATICDYNAMIC的行。

代码语言:javascript
复制
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
EN

Ask Ubuntu用户

发布于 2021-11-12 14:01:52

假设您希望使用awk从$1等于All的位置打印行到文件的末尾:

代码语言:javascript
复制
awk '$1=="All" {p=1; next} p' name.date.txt

(如果要包含匹配行,则省略next )。

要使输出逗号分开,请将输出字段分隔符设置为",“并通过计算$1=$1强制重建记录,例如:

代码语言:javascript
复制
awk '$1=="All" {p=1; OFS=","; next} p {$1=$1; print}' name.date.txt
票数 3
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1375080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档