2016-04-26 17 views
0

Wenn ich den BefehlWie wird der Wert des ersten übereinstimmenden Attributs in ldapsearch abgerufen?

ldapsearch -h [HOST] -x -LLL uid=[UID] sn 

Es wird wieder

dn: [DN] 
sn: [SURNAME] 
sn;x-role-2: [SURNAME] 

für einen Eintrag, die mehrere Werte von sn hat. Ich habe eine Frage in 2 Teilen:

  1. Wie kann ich ldapsearch Rückkehr die Werte haben der Attribute nur, dh

    [SURNAME] 
    [SURNAME] 
    
  2. Wie kann ich ldapsearch Rückkehr der Wert des ersten haben Attribut passend nur, dh

    [SURNAME] 
    

Ich weiß, ich kann einige String-Manipulation mit grep und sed, um all dies zu replizieren (und ich habe bereits), aber ich frage mich, ob es eine effizientere, integrierte Möglichkeit, diese beiden Ziele zu erreichen.

Jede Hilfe würde sehr geschätzt werden!

EDIT: Hier ist der Code I zur Zeit zu erreichen, bin mit dem obigen:

ldapsearch -h [HOST] -x -LLL uid=[UID] sn | sed 's/[^:]*: //;2q;d' 

Die sed 's/[^:]*: //;2q;d' erste entfernt die Attributnamen und wählt dann den Wert des ersten Anpassungsattribut (die auf der ist zweite Zeile, da die dn die erste Zeile einnimmt).

Antwort

1

Es gibt einige builtins, die tatsächlich helfen können:

Schnitt die ouput pro Spalte basierend auf einem Separator (in Ihrem Fall aufspalten :) Kopf -1 wird die erste Zeile der Ausgabe zurück.

Zum Beispiel:

ldapsearch -h [HOST] -x -LLL uid=[UID] sn | cut -d ":" -f 2- 

nur sollte nur

ldapsearch -h [HOST] -x -LLL uid=[UID] sn | head -1 

sollte den Attributwert angezeigt werden, die erste Zeile der Ausgabe zurückgeben

man kann sich auch zusammen kombinieren:

ldapsearch -h [HOST] -x -LLL uid=[UID] sn | head -1 | cut -d ":" -f 2- 

http://linux.die.net/man/1/head

http://linux.die.net/man/1/cut

2

Während die Antwort von @Francois würde (teilweise) arbeiten, würde ich auch Sie ermutigen, auf das LDAP-Protokoll-Spezifikation zu sehen, section 4.1.7, die

Der Satz von Attribut sagt Werte sind ungeordnet.Implementierungen MÜSSEN sich NICHT darauf verlassen, dass die Reihenfolge wiederholbar ist.

Mit anderen Worten, es gibt keine Garantie, welcher Wert der erste sein wird. Dies kann in Ordnung sein, wenn es Ihnen egal ist, welchen Wert Sie einnehmen. Sie müssen auch berücksichtigen, wenn Sie sich für Attribute mit Tagging-Optionen interessieren (Ihr Beispiel zeigt das). Sollte Ihre Anwendung diesen Wert anstelle der Attributwerte ohne die Markierungsoptionen verwenden?

Die von @Francois bereitgestellte Antwort funktioniert nicht, wenn Sie Attributwerte mit Sonderzeichen haben (der angezeigte Wert wäre in diesem Fall BASE64-kodiert und nach dem Attributtyp wären zwei Doppelpunkte vorhanden - siehe auch RFC 2849).

Vielleicht möchten Sie ein kleines Skript schreiben (in Python auf Perl), um das zu tun, was Sie brauchen, ohne sich auf Shell-Magie zu verlassen, die schwer zu bekommen ist.

+0

Danke. Ich habe die Frage so aktualisiert, dass sie den Code enthält, den ich gerade verwende. – user76284

+0

Ich versuche hier nicht, Haare zu teilen, aber das Skript im Abschnitt BEARBEITET erhält immer noch nicht den Wert, wenn das angezeigte LDIF BASE64-kodierte Daten enthält. Sie müssen diese Daten wahrscheinlich zuerst dekodieren, um sie in einer anderen Anwendung zu verwenden. –