Puncte:2

Filtrarea conținutului comenzii cu grep

drapel kn

Încerc să filtrez rezultatul ssh-keyscan. Scopul acestui lucru este de a filtra ieșirea, astfel încât să o pot folosi în codul meu python pentru a identifica gazdele conectate la VPN-ul meu. În mod normal, aș folosi grep pentru a filtra, unul dintre greps-ul meu filtrează corect, dar celălalt nu.Primul grep lucrează pentru a obține doar ID-ul ed25519, dar nu sunt sigur de ce primesc și liniile SSH-2.0.... Comanda pe care am rulat-o împreună cu rezultatul este mai jos:

utilizator@gazdă# ssh-keyscan 10.xx.xx.xx | grep ed25519 | grep -v "#"
  # 10.xx.xx.xx:22 SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.3
  # 10.xx.xx.xx:22 SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.3
  # 10.xx.xx.xx:22 SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.3
  # 10.xx.xx.xx:22 SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.3
  # 10.xx.xx.xx:22 SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.3
  10.xx.xx.xx ssh-ed25519 <cheie gazdă>

Am nevoie de el pentru a imprima doar linia ed25519. De asemenea, am încercat AWK să filtreze, dar încă nu obțin rezultatul de care am nevoie.

Ai idee cum să filtrezi doar linia ed25519?

drapel hr
Liniile `#` vor fi probabil stderr, nu stdout - încercați `ssh-keyscan 10.xx.xx.xx 2>&1 | grep ed25519 | grep -v "#"`
Tim R avatar
drapel kn
Ai avut perfectă dreptate în privința asta. Dacă doriți să îl introduceți ca răspuns, astfel încât să vă pot acorda credit ca soluție. Mulțumesc mult. Nici nu am avut nevoie de al doilea grep cu asta, deoarece 2>&1 l-au corectat
drapel hr
OK gata - am făcut și câteva sugestii pentru a elimina grep(urile)
Puncte:3
drapel hr

Rândurile care încep cu # merg la stderr (eroare standard) mai degrabă decât la ieșire standard (stdout). A obține grep -v pentru a le exclude, trebuie să redirecționați stderr la stdout:

ssh-keyscan 10.xx.xx.xx 2>&1 | grep ed25519 | grep -v "#"

Rețineți că puteți elimina primul grep adăugând un filtru de tip la comanda ssh-keyscan în sine:

ssh-keyscan -t ed25519 10.xx.xx.xx 2>&1 | grep -v "#"

Dacă preferați, puteți redirecționa toată eroarea la null în loc să o filtrați:

ssh-keyscan -t ed25519 10.xx.xx.xx 2>/dev/null
Puncte:0
drapel us

Ei bine, dacă știți că rezultatul va include „ssh-ed25519”, ar trebui să vă gândiți la asta.

Sau conductă la asta.

Sau dacă știți că va fi ultima linie a ieșirii, treceți la comanda „coada” corespunzătoare.

Te-ai uitat la comanda sed?

drapel in
Bun venit la AskUbuntu. Când sugerați unei persoane să facă A sau B pentru a remedia o problemă, este de obicei benefic să includeți exemple de soluție. Din fericire, acestea există deja cu răspunsul acceptat

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.