Ich habe eine Liste von Objekten, die wie folgt von ldapsearch
ausgegeben werden:
Bisher habe ich die folgende Regex:
%Vor%Was Ergebnisse wie folgt zurückgibt:
%Vor%Ich brauche eine Regex, die Ergebnisse wie folgt zurückgibt:
%Vor% Was muss ich in meiner Regex ändern, damit das Muster ( cn=
und das Komma) nicht in den Ergebnissen enthalten ist?
BEARBEITEN: Ich werde sed
verwenden, um den Mustervergleich durchzuführen und die Ausgabe an andere Befehlszeilenprogramme weiterzuleiten.
Sie müssen eine Gruppierung durchführen. Dies geschieht, indem die Regex zu:
geändert wird %Vor%Dies wird dann Ihr Ergebnis in eine Gruppierungsvariable auffüllen. Abhängig von Ihrer Sprache unterscheidet sich der Wert. (Für Sie mit sed wird die Variable \ 1)
seinBeachten Sie, dass Sie bei den meisten Regex-Varianten nicht die eckigen Klammern () entfernen müssen, aber da Sie sed verwenden, müssen Sie wie oben gezeigt vorgehen.
Für eine hervorragende Quelle für reguläre Ausdrücke empfehle ich: Reguläre Ausdrücke beherrschen
OK, der Ort, an dem Sie die spezifischere Frage gestellt haben, wurde als "exaktes Duplikat" abgeschlossen, also kopiere ich meine Antwort von hier nach hier:
Wenn Sie sed verwenden möchten, können Sie Folgendes verwenden:
sed -e 's/dn: cn=\([^,]*\),.*$//'
Sie müssen [^,]*
verwenden, weil in% sed .*
"gierig" ist, was bedeutet, dass alles übereinstimmt, bevor Sie ein beliebiges anderes Zeichen betrachten. Das heißt, wenn Sie \(.*\),
in Ihrem Muster verwenden, wird es bis zum letzten Komma passen, nicht bis zum ersten Komma.
Ohne zu wissen, welche Sprache Sie verwenden, können wir nicht sicher sagen, aber in den meisten regulären Ausdrucksparsern, wenn Sie Klammern verwenden, wie zum Beispiel
/ \ bcn = (\ w *), / g
Dann werden Sie in der Lage sein, das erste übereinstimmende Muster (oft \ 1) als genau das zu erhalten, nach dem Sie suchen. Um genauer zu sein, müssen wir wissen, welche Sprache Sie verwenden.
Tags und Links regex pattern-matching sed