Puncte:0

Cum să obțineți textul corect cu bash

drapel bz

Sunt nou în scripturile bash. Încerc să fac un script care verifică dispozitivele (tp-link, cisco, lynksys...) să se conecteze prin telnet și să obțină câteva informații.

Deci primul script funcționează fără probleme:

#!/bin/sh
ACUM=$(data +"%m-%d-%Y")
HOST='IPADDRES'
USER='USER'
PAROLA='PAROLA'
CMD='activare'
CMD2='arată tabelul de adrese Mac'
CMD3='lungimea terminalului 0'

(eco "$HOST -" ; (
    ecou deschide „$HOST”
    somn 1
    ecou „$USER”
    somn 1
    echo „$PASSWD”
    somn 1
    ecou „$CMD”
    somn 1
    ecou „$CMD3”
    somn 1
    echo „$CMD2\n”
    dormi 30
    ecou "ieșire"
    ) | telnet ) > nume.$ACUM.txt

Cand fac: nume pisică.data.txt Obțin acest rezultat


hostname1 -
telnet> Încercam hostname1...
Conectat la hostname1.
Caracterul de evacuare este „^]”.
Verificarea accesului utilizatorului

Nume de utilizator: 
Parola:








                 Bine ați venit la BDCOM P3310C EPON OLT




hostname1>activare
hostname1#lungimea terminalului 0
hostname1#show mac address-table
        Tabel de adrese Mac (total 311)
-------------------------------------------

Vlan Mac Address Type Ports
---- ----------- ---- -----
Toate procesorul 8479.735b.9132 STATIC
300 44d9.e776.d8b7 DINAMIC g0/3
300 4c5e.0cff.6dea DINAMIC g0/3
300 d4ca.6d9e.3280 DINAMIC g0/3

Deci am nevoie de export doar această linie 1 2 și 4 e asa:

300 44d9.e776.d8b7 DINAMIC g0/3
300 4c5e.0cff.6dea DINAMIC g0/3
300 d4ca.6d9e.3280 DINAMIC g0/3

Nu am nevoie de nimic înainte „Porturi tip adresă Vlan Mac”

Deci fac acest script:

nume pisică.data.txt | awk '$1<"ALL"{printează $1" ",$2" ",$3" ",$4}"

Și obțin acest rezultat:

hostname1 -














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

---- ----------- ---- -----
300 44d9.e776.d8b7 DINAMIC g0/3
300 0002.9b80.7f28 DINAMIC g0/3
300 0002.9b65.7b66 DINAMIC g0/3
300 4c5e.0cff.6dea DINAMIC g0/3
300 d4ca.6d9e.3280 DINAMIC g0/3

Pe cine sa repare?

Exportam fișierul doar aceste informații:

300 44d9.e776.d8b7 DINAMIC g0/3
300 0002.9b80.7f28 DINAMIC g0/3
300 0002.9b65.7b66 DINAMIC g0/3
300 4c5e.0cff.6dea DINAMIC g0/3
300 d4ca.6d9e.3280 DINAMIC g0/3

Dacă va fi mai bine dacă pot exporta în tabel sau csv

Multumesc pentru raspunsuri

terdon avatar
drapel cn
Eeek! Nu utilizați CAPS pentru nume de variabile în scripturile shell. Capurile sunt folosite pentru variabilele de mediu globale, astfel încât utilizarea aceluiași nume poate cauza probleme neașteptate. De exemplu, `$USER` este o variabilă de mediu globală setată la numele utilizatorului curent, astfel încât _chiar_ nu doriți să o schimbați într-un script.
Petar Petrov avatar
drapel bz
Da, nu folosesc USER ca admin sau petar Doar pentru aici am pus USER
terdon avatar
drapel cn
Vorbesc despre numele variabilelor tale. Ar trebui să folosiți `$user`, nu `$USER` și `$host`, nu `$HOST` etc. Este o practică proastă să folosiți CAPS pentru numele variabilelor shell.
Petar Petrov avatar
drapel bz
Am inteles ca ai dreptate. O sa o repar, multumesc
Puncte:4
drapel hr

Presupunând că doriți să imprimați linii de unde $1 este egal cu Toate până la sfârșitul fișierului folosind awk:

awk '$1=="Toate" {p=1; următor} p' nume.data.txt

(omiteți Următorul dacă doriți să includeți linia de potrivire).

Pentru a separa virgula de ieșire, setați separatorul câmpului de ieșire la "," și forțați reconstrucția înregistrării prin evaluarea $1=$1 de exemplu:

awk '$1=="Toate" {p=1; OFS=","; următorul} p {$1=$1; print}' name.date.txt
Puncte:1
drapel vn

Există mai multe opțiuni, dar nu ți-ai definit criteriile clare - așa că în mare parte presupun aici.

Dacă rezultatul de care aveți nevoie este în mod constant în partea de jos a fișierului, puteți utiliza coadă pentru a obține ultimele X linii, de exemplu:

coada -n 6 nume.data.txt 

... vă va oferi ultimele 6 rânduri (tabelul).

Vlan Mac Address Type Ports
---- ----------- ---- -----
Toate procesorul 8479.735b.9132 STATIC
300 44d9.e776.d8b7 DINAMIC g0/3
300 4c5e.0cff.6dea DINAMIC g0/3
300 d4ca.6d9e.3280 DINAMIC g0/3

O altă opțiune este utilizarea grep pentru a căuta un model, de ex.:

grep „STATIC\|DYNAMIC” nume.date.txt

... se va potrivi cu acele linii care includ fie cuvântul STATIC sau DINAMIC.

Toate procesorul 8479.735b.9132 STATIC
300 44d9.e776.d8b7 DINAMIC g0/3
300 4c5e.0cff.6dea DINAMIC g0/3
300 d4ca.6d9e.3280 DINAMIC g0/3
Petar Petrov avatar
drapel bz
Salut, multumesc pentru raspuns. Varianta „grep 'STATIC\|DYNAMIC' name.date.txt” este perfectă pentru mine. Mulțumiri

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.