Anzeige:
Ergebnis 1 bis 14 von 14

Thema: doppelte Zahlen innerhalb einer Zeile und Klammer finden

  1. #1
    Registrierter Benutzer
    Registriert seit
    Dec 2012
    Beiträge
    6

    doppelte Zahlen innerhalb einer Zeile und Klammer finden

    Hi,
    ich möchte mehrere Dateien durchsuchen und doppelte Zahlen innerhalb einer Zeile und innerhalb einer geschweiften Klammer finden:

    Ausgangspunkt (Beispieldatei-Inhalt):

    Bereich=123, Content={104, 3644}
    Bereich=123, Content={106, 4540, 3657, 3655, 3655}
    Bereich=123, Content={105, 1234}


    ich suche konkret nach doppelten Zahlen innerhalb der {} also wäre "3655, 3655" zu finden.

    Benötige Unterstützung

  2. #2
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    21.353
    ... und was ist das gewünschte Ergebnis?
    Ich bin root - ich darf das.

  3. #3
    Registrierter Benutzer
    Registriert seit
    Dec 2012
    Beiträge
    6
    als Ausgabe brauche ich die Datei und Zeilen, wo die doppelten Werte vorhanden sind, also:

    dateiname.test:Bereich=123, Content={106, 4540, 3657, 3655, 3655}
    Geändert von Greatbrian089 (23.10.19 um 13:59 Uhr)

  4. #4
    Registrierter Benutzer
    Registriert seit
    Apr 2009
    Ort
    Erde
    Beiträge
    2.347
    Code:
    \{((\d+)(?:, |\}))+\2
    mit https://regex101.com/ getestet
    Gruß nopes
    (,,,)---(^.^)---(,,,) /var/log/messages | grep cat

  5. #5
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    21.353
    ... und die Doppelungen sind zwingend immer direkt hintereinander?
    Ich bin root - ich darf das.

  6. #6
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    21.353
    Zitat Zitat von nopes Beitrag anzeigen
    Code:
    \{((\d+)(?:, |\}))+\2
    mit https://regex101.com/ getestet
    fast :-)

    Code:
    Bereich=123, Content={105, 1234, 5, 55}
    :-)
    Ich bin root - ich darf das.

  7. #7
    Registrierter Benutzer
    Registriert seit
    Apr 2009
    Ort
    Erde
    Beiträge
    2.347
    Code:
    \{(?:(\d+), )+[^}]*\1
    Testdaten:
    Bereich=123, Content={104, 3644}
    Bereich=123, Content={106, 4540, 3657, 3655, 3655}
    Bereich=123, Content={105, 1234}
    Bereich=123, Content={106, 4540, 3657, 3655, 345, 3655}
    Geändert von nopes (23.10.19 um 14:13 Uhr) Grund: regex "vereinfacht"
    Gruß nopes
    (,,,)---(^.^)---(,,,) /var/log/messages | grep cat

  8. #8
    Registrierter Benutzer
    Registriert seit
    Dec 2012
    Beiträge
    6
    nein die Dopplungen können auch so aussehen:

    Bereich=123, Content={106, 4540, 3655, 1234, 3655}

    Dau frage, wo ist hier der Fehler beim "(" ?

    grep -e \{((\d+)(?:, |\}))+\2 test.txt
    -bash: syntax error near unexpected token `('

    egrep '\{((\d+)(?:, |\}))+\2' test.txt
    kein Ergebnis
    Geändert von Greatbrian089 (23.10.19 um 14:18 Uhr)

  9. #9
    Registrierter Benutzer
    Registriert seit
    Apr 2009
    Ort
    Erde
    Beiträge
    2.347
    Quotes fehlen:
    Code:
    # regex backref foo with grep
    echo "Bereich=123, Content={104, 3644}"                         > demo.txt
    echo "Bereich=123, Content={106, 4540, 3657, 3655, 3655}"      >> demo.txt
    echo "Bereich=123, Content={105, 1234}"                        >> demo.txt
    echo "Bereich=123, Content={106, 4540, 3657, 3655, 345, 3655}" >> demo.txt
    grep -oP '\{(?:(\d+), )+[^}]*\1' demo.txt
    =>
    Code:
    $bash -f main.sh
    {106, 4540, 3657, 3655, 3655
    {106, 4540, 3657, 3655, 345, 3655
    sa https://www.tutorialspoint.com/execute_bash_online.php
    Geändert von nopes (23.10.19 um 14:47 Uhr) Grund: typo
    Gruß nopes
    (,,,)---(^.^)---(,,,) /var/log/messages | grep cat

  10. #10
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    21.353
    immer wieder lustig, was man mit RegExen alles machen kann...
    Ich bin root - ich darf das.

  11. #11
    Registrierter Benutzer
    Registriert seit
    Apr 2009
    Ort
    Erde
    Beiträge
    2.347
    Regexe sind inzwischen fast 70 Jahr alt
    Gruß nopes
    (,,,)---(^.^)---(,,,) /var/log/messages | grep cat

  12. #12
    Registrierter Benutzer
    Registriert seit
    Dec 2012
    Beiträge
    6
    krasser sch@ß, danke vielmals -P hatte ich gar nicht auf dem Tacho

  13. #13
    Registrierter Benutzer
    Registriert seit
    Dec 2012
    Beiträge
    6
    kurze Anmerkung, es wird auch nun sowas gefunden:
    Content={103, 1032, 5558}

  14. #14
    Registrierter Benutzer
    Registriert seit
    Apr 2009
    Ort
    Erde
    Beiträge
    2.347
    Ups da hatte ich vergessen, zu forden, dass entweder ", " oder "}" der Backref folgen muss:
    Code:
    \{(?:(\d+), )+[^}]*\1(?:, |\})
    Gruß nopes
    (,,,)---(^.^)---(,,,) /var/log/messages | grep cat

Ähnliche Themen

  1. OT: Letzte befüllte Zelle in einer Zeile in OO Calc finden
    Von AndreasMeier im Forum Meldungen und Mitglieder
    Antworten: 4
    Letzter Beitrag: 26.09.09, 20:30
  2. mit sed einen Ausdruck in einer Zeile suchen und ganze Zeile ersetzen
    Von piccus im Forum System installieren und konfigurieren
    Antworten: 5
    Letzter Beitrag: 22.05.08, 16:56
  3. doppelte dateien finden? ( umlaute )
    Von muell200 im Forum Linux Allgemein
    Antworten: 0
    Letzter Beitrag: 03.11.05, 10:34
  4. Texte in einer Datei in einer bestimmten zeile einzufügen
    Von geist_der_foren im Forum Linux Allgemein
    Antworten: 14
    Letzter Beitrag: 28.06.04, 17:33
  5. script: doppelte MP3s finden und löschen
    Von xmms im Forum Linux Allgemein
    Antworten: 4
    Letzter Beitrag: 26.05.03, 00:02

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •