Suche analogen Shell Befehl zu

Diskutiere Suche analogen Shell Befehl zu im Shell-Skripte Forum im Bereich Programmieren unter Linux/Unix; Hi gibt es einen befehl der den selben zweck erfüllt wie in perl $string =~ /([abc])/ print $1; also aus einem string den wert eines...

  1. Nano

    Nano Foren As

    Dabei seit:
    02.12.2006
    Beiträge:
    93
    Zustimmungen:
    0
    Hi gibt es einen befehl der den selben zweck erfüllt wie in perl

    Code:
    $string =~ /([abc])/
    print $1; 
    
    
    also aus einem string den wert eines regex ausliest ?
    das ganze soll wiegesagt ohne perl funktionieren
     
  2. Jabo

    Jabo Aufgabe ohne Minister

    Dabei seit:
    12.10.2006
    Beiträge:
    1.322
    Zustimmungen:
    0
    Ort:
    Hamburg
    grep -o Ausdruck Datei könntest du meinen?
    Code:
    ~>cat test.txt
    Jens ist doof
    Klaus ist nicht doof
    Lisa ist undoof
    Das Leben ist [_________]
    
    ~>grep doof test.txt
    Jens ist doof
    Klaus ist nicht doof
    Lisa ist undoof
    
    ~>grep -o "\bdoof\b" test.txt
    doof
    doof
    
    Der letzte Fall trifft auf "doof" zu, aber nur, wenn es innerhalb von Wortgrenzen steht (also nicht "undoof). Durch die Option -o wird nur der zutreffende Teil der Zeile ausgegeben, während grep sonst die Zeilen ganz ausgibt, in denen der Ausdruck vorkommt.
     
  3. #3 Wolfgang, 09.03.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Du wirst dazu kein Gleichnis finden, wohl aber für spezielle Fälle spezielle Lösungen.
    Auch ist es abhängig davon, welche Shell du verwendest.

    Mögliche Lösungen gehen von Parameterexpansion bis Zusatzhilfsmittel wie cut tr sed und eben auch wieder Perl und awk usw.

    Gruß Wolfgang
     
  4. #4 Gott_in_schwarz, 09.03.2008
    Zuletzt bearbeitet: 09.03.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    naja, es gibt einen riesigen unterschied zwischen "nicht perl" und "shell", weil es wie bereits hier gesagt viele tools gibt, die auch mit regexes arbeiten. (awk, grep, etc.)

    und auch bei "shell" müsstest du etwas genauer sein...

    ANYWHO, some might call it bloat:
    Code:
    var="fooZOMGbar"
    if [[ "$var" =~ ^foo(.+)bar$ ]]; then
        echo "${BASH_REMATCH[1]}"       # gibt ZOMG aus
    fi
    funktioniert hier mit meiner bash:
    Code:
    bash --version
    GNU bash, version 3.2.25(1)-release

    [edit]:
    geht sogar ohne if-abfrage:
    Code:
    var="bla catch me if you can blub"
    [[ "$var" =~ ^bla(.+)blub$ ]]
    echo ${BASH_REMATCH[1]} # gibt aus: catch me if you can
     
  5. #5 Nano, 10.03.2008
    Zuletzt bearbeitet: 10.03.2008
    Nano

    Nano Foren As

    Dabei seit:
    02.12.2006
    Beiträge:
    93
    Zustimmungen:
    0
    erstmal danke für die antworten, was das den letzten post betrifft

    das wäre genau da was ich suche allerdings

    ./test: line 4: syntax error in conditional expression: unexpected token `('
    ./test: line 4: syntax error near `^foo(.'
    ./test: line 4: `if [[ "$var" =~ ^foo(.+)bar$ ]]; then'

    die klammern werden erst garnicht angenommen, hast du nicht irgendetwas eingebunden ?

    ich arbeite mit

    GNU bash, version 3.00.16(1)-release (sparc-sun-solaris2.10)
    Copyright (C) 2004 Free Software Foundation, Inc.

    ---------------------------------------------------------------
    ok habe den übeltäter gefunden, der regex muss mit "" gequotet werden
     
  6. #6 Gott_in_schwarz, 10.03.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    bah, das ist echt ein unding und einer der gründe, warum man das eigentlich nicht benutzen sollte. das (also die regex..) darf ich hier nämlich überhaupt nicht quoten, sonst "erkennt" die bash die regex als string und nicht als regex... irgendwann zwischendurch ging wohl auch beides und boah, naja. verwende lieber einen der üblichen verdächtigen ((e)grep, sed, awk, etc.) statt dieses unportablen konstrukts. (irgendwo um version 3.2 wurde das verändert..)
     
  7. Jabo

    Jabo Aufgabe ohne Minister

    Dabei seit:
    12.10.2006
    Beiträge:
    1.322
    Zustimmungen:
    0
    Ort:
    Hamburg
    Hm, also zumindest bei mir in dem Beispiel muß ich quoten, damit sowas wie \b überhaupt geht.

    Ich hatte mir gedacht, daß man das muß, weil *sonst* auf der Seite von grep das ganze nicht heile ankommt. Ich dachte, daß die bash das als String ansehen und an grep übergeben *muß*, damit grep den komplett übergeben bekommt und dann seinerseits merkt, daß es ein regulärer Ausdruck mit Wortgrenzen ist. Aber ich bin auch bei weitem alles andere als der Syntax-Guru für bash :)

    Innerhalb eines Shellscriptes mag das anders aussehen, aber das war die ursprüngliche Frage gar nicht... die war nach einem Befehl, der aus einer Zeile innerhalb einer Datei was raus sucht und den Rest weg läßt.

    Folgendes passiert unter Debain Lenny, man sehe auch die Versionsangaben... und das ist ja relativ neu alles. Noch viel neuere Sachen würde ich nicht unbedingt als Kompatibilitätsmaßstab ansehen:

    Code:
    $ cat test.txt
    Jens ist doof
    Klaus ist nicht doof
    Lisa ist undoof
    Das Leben ist [_________]
    doof doof doof und undoof ist doof
    
    $ grep -on \bdoof\b test.txt
    $ [color=gray][i] <--- keine Ausgabe![/i][/color]
    
    $ grep -on "\bdoof\b" test.txt
    1: doof
    2: doof
    5: doof
    5: doof
    5: doof
    5: doof
    
    $ grep -V
    GNU grep 2.5.3
    [color=gray][i][....][/i][/color]
    
    $ bash --version
    GNU bash, version 3.[color=red]1[/color].17(1)-release [color=gray][i][....]
    merke, das ist unter 3.2 und noch nicht mal "stable" ...[/i][/color]
    
    $ cat /etc/issue
    Debian GNU/Linux lenny/sid
    
     
  8. #8 Gott_in_schwarz, 10.03.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    vollkommen richtig, ich meinte ja auch das bash-internal:
    Code:
    [[ "$foo" =~ regex ]]
    wo sich die quoting regeln in den letzten versionen recht drastisch geändert haben:
    von: man muss (die regex) quoten, über: man darf (die regex) quoten, bis: wenn man (die regex) quotet, geht die welt unter..
    innerhalb dieses konstrukts gelten spezielle quoting regeln, sodass die regex auch ohne quoting vom globbing "beschützt" ist. quotet man die regex, so versucht die bash einfaches string matching. wobei man das mit regexes auch kann, von daher zerrinnt mir da ein wenig der sinn zwischen den fingern...

    wenn man ein externes regex tool verwendet (sed, awk, grep, perl...) muss man die argumente, so sie denn regexes sind, in der tat quoten, um die bash vom interpretieren der metazeichen (asterisk, fragezeichen..) zu hindern. (es sei denn, man steht auf überraschungen.)

    und was die frage des threaderstellers angeht: kommt halt drauf an, was er genau machen will, ob das mit (e)grep -o geht. wenn das beispiel von ihm oben alles ist, was er machen will, dann ja: das geht. geklammerte "teilausdrücke" aus dem gesamten gematchten string könnte man vielleicht über mehrere (e)grep -o pipes emulieren oder so, aber da dann auch nur eine klammer auf einmal. alles schon ein ziemlicher workaround, wenn man bedenkt, dass sed das zb "out of the box" kann.
     
Thema:

Suche analogen Shell Befehl zu

Die Seite wird geladen...

Suche analogen Shell Befehl zu - Ähnliche Themen

  1. Suche Twin Receiver mit Festplatte

    Suche Twin Receiver mit Festplatte: Hallo liebes Forum Kennt sich jemand von euch vielleicht mit Receivern aus? Ich suche einen Twin Receiver mit Festplatte, habe aber keine Ahnung...
  2. Paket Sucher

    Paket Sucher: Hallo, ich verstehe den Paketsucher nicht ganz. pkt search paket sucht zwar findet aber am meisten wenn ich das Wort nicht ganz ausschreibe. pkt...
  3. Suche erweiterbare Audio-APP für 768kHz

    Suche erweiterbare Audio-APP für 768kHz: Kennt jemand eine OS audio APP für den PC, welche höhere Bitraten unterstützt, bzw. die man entsprechend erweitern könnte? Auf dem WIN-Markt habe...
  4. Netzwerkproblem ? , wo ud wie suchen

    Netzwerkproblem ? , wo ud wie suchen: Hallo Folgende Problem: Testserver ist i686 Debian-unstable , auf dem läuft primär der apt-proxy apt-cahcer ng. Zugriff im Moment nur per ssh....
  5. suche lightweight ftp server mit user management

    suche lightweight ftp server mit user management: Hallo Suche ein lightweight ftp server mit user management kenne nur Drftpd der separat vom system die accounts erstellt. gibt es sowas auch in...