Score:0

วิธีรับข้อความที่ถูกต้องด้วย bash

ธง bz

ฉันใหม่ในสคริปต์ทุบตี ฉันพยายามสร้างสคริปต์ที่ตรวจสอบอุปกรณ์ ( tp-link, cisco, lynksys... ) เพื่อเชื่อมต่อผ่าน telnet และรับข้อมูลบางอย่าง

ดังนั้นสคริปต์แรกจึงใช้งานได้โดยไม่มีปัญหา:

#!/bin/sh
NOW=$(วันที่ +"%m-%d-%Y")
โฮสต์ = 'IPADDRES'
USER='ผู้ใช้'
PASSWD='รหัสผ่าน'
CMD = 'เปิดใช้งาน'
CMD2='แสดงตารางที่อยู่ mac'
CMD3='ความยาวขั้ว 0'

(เสียงสะท้อน "$โฮสต์ - " ; (
    echo เปิด "$HOST"
    นอน1
    เสียงสะท้อน "$USER"
    นอน1
    เสียงสะท้อน "$PASSWD"
    นอน1
    เสียงสะท้อน "$CMD"
    นอน1
    เสียงสะท้อน "$CMD3"
    นอน1
    เสียงสะท้อน "$CMD2\n"
    นอน 30
    ก้อง "ออก"
    ) | telnet ) > ชื่อ.$NOW.txt

เมื่อฉันทำ: ชื่อแมว.date.txt ฉันได้รับผลลัพธ์นี้


ชื่อโฮสต์ 1 -
telnet> ลองชื่อโฮสต์ 1...
เชื่อมต่อกับชื่อโฮสต์1.
อักขระ Escape คือ '^]'
การตรวจสอบการเข้าถึงของผู้ใช้

ชื่อผู้ใช้: 
รหัสผ่าน:








                 ยินดีต้อนรับสู่ BDCOM P3310C EPON OLT




ชื่อโฮสต์ 1> เปิดใช้งาน
ชื่อโฮสต์ 1# ความยาวเทอร์มินัล 0
ชื่อโฮสต์1#แสดงตารางที่อยู่ mac
        ตารางที่อยู่ Mac (ทั้งหมด 311)
------------------------------------------

พอร์ตประเภทที่อยู่ Vlan Mac
---- ----------- ------ -----
CPU แบบคงที่ทั้งหมด 8479.735b.9132
300 44d9.e776.d8b7 ไดนามิก g0/3
300 4c5e.0cff.6dea ไดนามิก g0/3
300 d4ca.6d9e.3280 ไดนามิก g0/3

ดังนั้นฉันต้องส่งออกแค่บรรทัดนี้ 1 2 และ 4 มันเป็นแบบนี้:

300 44d9.e776.d8b7 ไดนามิก g0/3
300 4c5e.0cff.6dea ไดนามิก g0/3
300 d4ca.6d9e.3280 ไดนามิก g0/3

ฉันไม่ต้องการอะไรก่อน "พอร์ตประเภทที่อยู่ Vlan Mac"

ดังนั้นฉันจึงสร้างสคริปต์นี้:

ชื่อแมว.date.txt | awk '$1<"ALL"{พิมพ์ $1" ",$2" ",$3" ",$4}'

และฉันได้รับผลลัพธ์นี้:

ชื่อโฮสต์ 1 -














             -----------------------------

---- ----------- ------ -----
300 44d9.e776.d8b7 ไดนามิก g0/3
300 0002.9b80.7f28 ไดนามิก g0/3
300 0002.9b65.7b66 ไดนามิก g0/3
300 4c5e.0cff.6dea ไดนามิก g0/3
300 d4ca.6d9e.3280 ไดนามิก g0/3

ใครแก้ไข ?

ฉันเพิ่งส่งออกไฟล์เฉพาะข้อมูลนี้:

300 44d9.e776.d8b7 ไดนามิก g0/3
300 0002.9b80.7f28 ไดนามิก g0/3
300 0002.9b65.7b66 ไดนามิก g0/3
300 4c5e.0cff.6dea ไดนามิก g0/3
300 d4ca.6d9e.3280 ไดนามิก g0/3

จะดีกว่าไหมถ้าฉันสามารถส่งออกเป็นตารางหรือ csv

ขอบคุณสำหรับคำตอบ

terdon avatar
cn flag
อี๊ก! อย่าใช้ CAPS สำหรับชื่อตัวแปรในเชลล์สคริปต์ ตัวพิมพ์ใหญ่ใช้สำหรับตัวแปรสภาพแวดล้อมส่วนกลาง ดังนั้นการใช้ชื่อเดียวกันอาจทำให้เกิดปัญหาที่ไม่คาดคิดได้ ตัวอย่างเช่น `$USER` เป็นตัวแปรสภาพแวดล้อมส่วนกลางที่ตั้งค่าเป็นชื่อผู้ใช้ปัจจุบัน ดังนั้นคุณ _really_ จึงไม่ต้องการเปลี่ยนแปลงสิ่งนั้นในสคริปต์
Petar Petrov avatar
bz flag
ใช่ ฉันไม่ได้ใช้ USER ก็เหมือนผู้ดูแลระบบหรือ petar สำหรับที่นี่ฉันใส่ USER
terdon avatar
cn flag
ฉันกำลังพูดถึงชื่อตัวแปรของคุณ คุณควรใช้ `$user` ไม่ใช่ `$USER` และ `$host` ไม่ใช่ `$HOST` เป็นต้น การใช้ CAPS สำหรับชื่อตัวแปรเชลล์ถือเป็นแนวทางปฏิบัติที่ไม่ดี
Petar Petrov avatar
bz flag
ฉันเข้าใจว่าคุณพูดถูก ฉันจะแก้ไขมัน ขอบคุณ
Score:4
ธง hr

สมมติว่าคุณต้องการพิมพ์บรรทัดจากที่ใด $1 เท่ากับ ทั้งหมด จนจบไฟล์โดยใช้ awk:

awk '$1=="ทั้งหมด" {p=1; ถัดไป} p' name.date.txt

(เว้น ต่อไป หากคุณต้องการรวมบรรทัดที่ตรงกัน)

เมื่อต้องการแยกเอาต์พุตด้วยเครื่องหมายจุลภาค ให้ตั้งค่าตัวคั่นฟิลด์เอาต์พุตเป็น "," และบังคับให้สร้างเรคคอร์ดใหม่โดยการประเมิน $1=$1 ตัวอย่างเช่น:

awk '$1=="ทั้งหมด" {p=1; OFS=","; ถัดไป} p {$1=$1; พิมพ์}' name.date.txt
Score:1
ธง vn

มีหลายตัวเลือก แต่คุณไม่ได้กำหนดเกณฑ์ที่ชัดเจน ดังนั้นฉันจึงเดาเป็นส่วนใหญ่

หากผลลัพธ์ที่คุณต้องการอยู่ที่ด้านล่างของไฟล์อย่างสม่ำเสมอ คุณสามารถใช้ หาง เพื่อรับ X บรรทัดสุดท้าย เช่น:

หาง -n 6 name.date.txt 

... จะให้ 6 บรรทัดสุดท้าย (ตาราง)

พอร์ตประเภทที่อยู่ Vlan Mac
---- ----------- ------ -----
CPU แบบคงที่ทั้งหมด 8479.735b.9132
300 44d9.e776.d8b7 ไดนามิก g0/3
300 4c5e.0cff.6dea ไดนามิก g0/3
300 d4ca.6d9e.3280 ไดนามิก g0/3

อีกทางเลือกหนึ่งคือการใช้ เกรป เพื่อค้นหารูปแบบ เช่น:

grep 'STATIC\|DYNAMIC' name.date.txt

... จะจับคู่บรรทัดเหล่านั้นที่มีทั้งคำ คงที่ หรือ พลวัต.

CPU แบบคงที่ทั้งหมด 8479.735b.9132
300 44d9.e776.d8b7 ไดนามิก g0/3
300 4c5e.0cff.6dea ไดนามิก g0/3
300 d4ca.6d9e.3280 ไดนามิก g0/3
Petar Petrov avatar
bz flag
สวัสดีขอบคุณสำหรับคำตอบ ตัวแปร "grep 'STATIC\|DYNAMIC' name.date.txt" นั้นสมบูรณ์แบบสำหรับฉัน ขอบคุณ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา