tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
4056
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    m3000 m3000 ist offline Mitglied Silber
    Registriert seit
    Jan 2005
    Beiträge
    99
    Hallo,

    ein ständig wiederkehrender Arbeitsablauf ist es, zunächst in Dateien nach einem String zu suchen. Und dann die gefundenen Dateien mit dem vi zu öffnen und zu bearbeiten. Der zweite Schritt geht erst, indem ich die Dateinamen-Treffer mit copy&paste in die vi-Aufrufzeile übernehme.
    Wie kann ich das automatisieren (SunOS 5.9)? Also in einem Befehl/Kurzskript sagen: "Öffne mir die Dateien mit dem vi, die den String xyz enthalten."

    Dank und Gruss
    Marcus
     

  2. #2
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Hallo,

    im vim:
    Code :
    1
    
    :help grep

    Konkretes Beispiel:

    1.) vim oeffnen
    2.)
    Code :
    1
    
     :grep main *.c
    3.)
    Code :
    1
    
     :cnext bzw :cprev
    um in der Trefferliste zurueck bzw vorzuspringen

    btw cnext und cprev kannst du auch auf eine Taste mappen...

    Gruß

    RedWing
     
    "I'm not deaf, I'm ignoring you"
    ----

  3. #3
    m3000 m3000 ist offline Mitglied Silber
    Registriert seit
    Jan 2005
    Beiträge
    99
    Danke. Nur ist leider unser VI noch nicht iMproved. Wer weiss noch was?
     

  4. #4
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Hallo,

    1.) wieso installierst du vim nicht einfach?
    2.) geht das denn im "uralten" vi nicht auch?
    3.) Falls du 1. und 2. negativ beantworten solltest waere das noch ein unbefriedigender Workaround:

    Code :
    1
    
    vi `grep main *.c  | sed -e 's/\(.*\):.*/\1/g'`

    Gruß

    RedWIng
     
    "I'm not deaf, I'm ignoring you"
    ----

  5. #5
    m3000 m3000 ist offline Mitglied Silber
    Registriert seit
    Jan 2005
    Beiträge
    99
    Zitat Zitat von RedWing
    1.) wieso installierst du vim nicht einfach?
    2.) geht das denn im "uralten" vi nicht auch?
    Ich bin hier nur einer von vielen Anwendern auf der Maschine. Installieren kann ich nicht und darf ich nicht. Leider. Und im vi klappt's nicht, ich hab's getestet. Meldung: "grep: Not an editor command"

    Zitat Zitat von RedWing
    3.) Falls du 1. und 2. negativ beantworten solltest waere das noch ein unbefriedigender Workaround:

    Code :
    1
    
    vi `grep main *.c  | sed -e 's/\(.*\):.*/\1/g'`
    Ach, so unbefriedigend ist das für mich nicht, klappt doch. Ich versuche dann noch, das mit Variable für den String in einen alias zu packen (scheitert noch am Anführungszeichen).
    Aber einen Optimierungswunsch hätte ich noch: Kann man so eine Art "distinct" einbauen? So dass also eine Datei nur einmal geöffnet wird, auch wenn die gesuchte Zeichenkette mehrmals vorkommt?

    Vielen Dank schon mal,
    Marcus

    PS: Ja, stimmt, meine Skript-Kenntnisse tendieren gegen Null.
     

  6. #6
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Du kannst dem grep die Option -l übergeben, da werden die Dateien nur aufgelistet sobald der gesuchte reg. Ausdruck darin vorkommt. /edit: Dann kannst du auch den sed Aufruf weglassen.

    Was verwendest du denn für eine Shell? In der Bash kann man keine Parameter an einen Alias übergeben. Da müßtest du schon eine Funktion schreiben.

    Gruß
    Geändert von deepthroat (27.04.06 um 14:06 Uhr)
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  7. #7
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Nur so als Anmerkung:

    Ich bin hier nur einer von vielen Anwendern auf der Maschine. Installieren kann ich nicht und darf ich nicht. Leider.
    Hast du denn kein Homeverzeichniss. Du koenntest den vim einfach zu dir ins Homeverzeichniss
    installieren und dann einen alias setzen.
    Wenn du grep mit dem vi benutzen willst, ist das builtin grep vom vim 10mal komfortabler...

    Gruß

    RedWing
     
    "I'm not deaf, I'm ignoring you"
    ----

  8. #8
    m3000 m3000 ist offline Mitglied Silber
    Registriert seit
    Jan 2005
    Beiträge
    99
    Hallo,
    Zitat Zitat von deepthroat
    Du kannst dem grep die Option -l übergeben, da werden die Dateien nur aufgelistet sobald der gesuchte reg. Ausdruck darin vorkommt. /edit: Dann kannst du auch den sed Aufruf weglassen.
    Fantastisch! Das ist es, was ich gesucht habe. Ich fasse noch mal zusammen:
    Code :
    1
    
    vi `grep -l <GesuchterString> * -R`
    Winziger Nachteil nur: Wenn es gar keinen grep-Treffer gibt, kommt keine plausible Meldung mehr, sondern es rauscht kurz grep: can't open -R durch. Das ist mir jetzt aber Wurst.
    ------------------------

    Zur neuen alias-Problematik:

    Zitat Zitat von deepthroat
    Was verwendest du denn für eine Shell? In der Bash kann man keine Parameter an einen Alias übergeben. Da müßtest du schon eine Funktion schreiben.
    Ich bin in der csh, bzw. ich erweitere als erste Tat jeder Session auf tcsh. Da wir schon dabei sind: Geht das dann? Wie?
     

  9. #9
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Ja, das dachte ich mir schon das da die (t)csh eingesetzt wird. Ich finde ja die csh ist das schlimmste was es gibt (zum Benutzen und vor allem Programmieren) - und die tcsh ist nicht viel besser. Ich hab mir deswegen eine cshrc gebastelt die mich automatisch in eine Bash einloggt. So, das mußte mal raus

    In der (t)csh gibt es keine Funktionen, aber man kann die History Substitution in den Alias benutzen:
    Code :
    1
    
    alias vigrep 'vi `grep -l \!*`'
    Das kannst du dann so benutzen:
    Code :
    1
    
    $ vigrep '[foo][bar]*' *.c *.h *.cc
    Ein weiterer Nachteil ist, das es nicht für Dateien mit Sonderzeichen im Namen funktioniert.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  10. #10
    m3000 m3000 ist offline Mitglied Silber
    Registriert seit
    Jan 2005
    Beiträge
    99
    Vielen Dank, alles gut. Und metasyntaktische Variablen habe ich auch noch kennen gelernt...

    Gruss
    Marcus
     

Ähnliche Themen

  1. sed unter SunOS
    Von yson im Forum Linux & Unix
    Antworten: 3
    Letzter Beitrag: 06.04.09, 16:50
  2. sed bzw grep problemchen
    Von ma-pi im Forum Linux & Unix
    Antworten: 2
    Letzter Beitrag: 03.03.08, 11:05
  3. Grep
    Von downset04 im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 2
    Letzter Beitrag: 17.10.06, 13:18
  4. SunOS vs. Linux
    Von AngstHab im Forum Hosting & Webserver
    Antworten: 2
    Letzter Beitrag: 29.05.06, 13:12
  5. find und grep mit php
    Von buzzom im Forum PHP
    Antworten: 8
    Letzter Beitrag: 25.08.05, 21:09