Mario: grep in die

Hallo,

hab folgende Frage mal in den Themenbereich "Server" eingeordnet, da die Admins da sicherlich Auskunft geben können:

Ist es möglich in einer bash ein Ergebnis in den Zwischenspeicher umzuleiten? Beispiel:

"cat myfile.log | grep 'INFO' > Zwischenspeicher"

PS: Ich greife von meiner Windows-Maschine über Putty auf einen Unix-Server zu.
PPS: Das zwischengespeicherte Ergebnis will ich in einen Editor kopieren.

Danke!

  1. Nachtrag :/
    Thema: "grep in den Zwischenspeicher"

  2. "cat myfile.log | grep 'INFO' > Zwischenspeicher"

    ~> Zwischenspeicher = `cat myfile.log | grep 'INFO' > Zwischenspeicher`;  
    ~> echo $Zwischenspeicher;
    

    Beachte die Backticks (`) und das Dollarzeicehen beim Lesen aus der Variable Zwischenspeicher.

    Doch halt, da ist noch Unsinn drin:

    [code lang=bash]~> Zwischenspeicher = | grep 'INFO' < myfile.log > Zwischenspeicher`;

    Ist besser, sonst bekommst Du noch einen Blumentopf im Wettbewerb um die sinnloseste Verwendung des Programmes cat, welches zum "Concatenieren" (Zusammenfügen) von Dateien dient.

    Ein

    [code lang=bash]~> Zwischenspeicher = cat myfile.log myfile.log.1 | grep 'INFO' > Zwischenspeicher;

    wäre also ok, weil cat dann tut, wozu es geschaffen wurde. In Deinem Beispiel ist es sinnlos.

    Jörg Reinholz

    1. "cat myfile.log | grep 'INFO' > Zwischenspeicher"

      So landet das in einer Datei. Das ist auch ein "Zwischenspeicher". Doch nähme man dafür mktemp. Dazu unten mehr.

      ~> Zwischenspeicher = `cat myfile.log | grep 'INFO'`;  
      ~> echo $Zwischenspeicher;
      

      Beachte die Backticks (`) und das Dollarzeichen beim Lesen aus der Variable Zwischenspeicher. Sieht aus wie eine Lösung.

      Doch halt, da ist noch Unsinn drin:

      ~> Zwischenspeicher = grep 'INFO' < myfile.log;`

      ... ist besser, sonst bekommst Du noch einen Blumentopf im Wettbewerb um die sinnloseste Verwendung des Programmes cat, welches zum "Concatenieren" (Zusammenfügen) von Dateien dient.

      Ein

      ~> Zwischenspeicher = cat myfile.log myfile.log.1 | grep 'INFO';

      wäre also ok, weil cat dann tut, wozu es geschaffen wurde. In Deinem Beispiel ist es sinnlos.

      Zur Datei als Zwischenspeicher:

      ~> tempfile=`[link:http://unixhelp.ed.ac.uk/CGI/man-cgi?mktemp@title=mktemp]`;  
      # Das legt ein eine temporäre Datei im Verzeichnis für temporäre Dateien an (/tmp/)  
      # und gibt den Name zurück, der in $tempfile steht. Beachte die Backticks.  
        
      ~> grep 'INFO' < myfile.log > $tempfile;  
      # Das schreibt alle Zeilen, die "INFO" enthalten in die Datei, deren Name in $tempfile steht.  
        
      ~> echo $tempfile;  
      # gibt den Name und den Pfad der Datei aus.  
        
      ~> less $tempfile;  
      # Betrachten des Inhalts  
        
      ~> wc -l < $tempfile;  
      # Ausgabe der Zeilenanzahl(=Ergebnisse) aus der Datei. So geht das für alle Programme  
      # die Dateinamen nicht als Parameter oder Optionsparameter entgegen nehmen, sondern  
      # ausschließlich die Daten über die Konsole erwarten.  
        
      ~> wc -l $tempfile;  
      # wc kann aber auch Dateien öffnen, die als Parameter angegeben werden.  
      # Das liefert aber außer dem Ergebnis auch noch den Dateiname. Kann unerwünscht sein.  
        
      ~> unlink $tempfile;  
      # löscht die Datei ohne Rückfrage  
      
      

      Jörg Reinholz

      1. Doch halt, da ist noch Unsinn drin:

        ~> Zwischenspeicher = grep 'INFO' < myfile.log;`

        (immer noch Unsinn, denn es fehlt ein Backtick:)
        ~> Zwischenspeicher = grep 'INFO' < myfile.log;

        Diese Backticks (oder deren Fehlen) ist im Browser leider schlecht zu erkennen.

        Jörg Reinholz

      2. Hallo,

        ~> tempfile=[link:http://unixhelp.ed.ac.uk/CGI/man-cgi?mktemp@title=mktemp];

        Das legt ein eine temporäre Datei im Verzeichnis für temporäre Dateien an (/tmp/)

        und gibt den Name zurück, der in $tempfile steht. Beachte die Backticks.

        ~> grep 'INFO' < myfile.log > $tempfile;

        Das schreibt alle Zeilen, die "INFO" enthalten in die Datei, deren Name in $tempfile steht.

        ~> echo $tempfile;

        gibt den Name und den Pfad der Datei aus.

        ~> less $tempfile;

        Betrachten des Inhalts

        ~> wc -l < $tempfile;

        Ausgabe der Zeilenanzahl(=Ergebnisse) aus der Datei. So geht das für alle Programme

        die Dateinamen nicht als Parameter oder Optionsparameter entgegen nehmen, sondern

        ausschließlich die Daten über die Konsole erwarten.

        ~> wc -l $tempfile;

        wc kann aber auch Dateien öffnen, die als Parameter angegeben werden.

        Das liefert aber außer dem Ergebnis auch noch den Dateiname. Kann unerwünscht sein.

        ~> unlink $tempfile;

        löscht die Datei ohne Rückfrage

          
        alles gut und schön - und wie kommen die Daten nun in die Zwischenablage des Remote-Systems, auf dem das Terminal (putty) läuft? Diese Magie fehlt in deinen Ausführungen leider vollständig.  
          
        Ciao,  
         Martin  
        
        -- 
        Wieso heißen die Dinger eigentlich Anrufbeantworter? Eigentlich sind es doch nur Anrufanhörer.  
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        
        1. wie kommen die Daten nun in die Zwischenablage des Remote-Systems
          Diese Magie fehlt in deinen Ausführungen leider vollständig.

          Ciao,
          Martin

          Habe ich (in zeitlicher Überschneidung zu Deiner Frage) beantwortet Das, was der Mario (wohl) wirklich will, geht noch magischer und ganz ohne Zwischenablage.

          Jörg Reinholz

  3. Tach!

    Ist es möglich in einer bash ein Ergebnis in den Zwischenspeicher umzuleiten?
    PS: Ich greife von meiner Windows-Maschine über Putty auf einen Unix-Server zu.
    PPS: Das zwischengespeicherte Ergebnis will ich in einen Editor kopieren.

    Die Shell unter Linux weiß erstmal nichts von einem Clipboard in Windows. Viele Terminals haben so etwas gleich gar nicht. Um dein Vorhaben zu erledigen, müsste die Shell das Terminal fernsteuern können. Das kann sie in gewissen Grenzen, zum Beispiel Drucken. Und wenn man nach "shell putty clipboard" sucht, dann bekommt man Ergebnisse, die von einem gepatchten PuTTY, das außer den Druckern noch die Zwischenablage anbietet: Putty clipboard patch für ein uraltes PuTTY und PuTTY SSH / Windows Clipboard Integration für ein auch nicht mehr aktuelles PuTTY.

    dedlfix.

    1. uraltes PuTTY, ... nicht mehr aktuelles PuTTY.
      dedlfix.

      openssh für Windows könnte eine Lösung im Problemstapel sein. Donwload, auspacken, installieren.

      Dann sollte, wegen der POSIX-Konformität auch in der Windows-Konsole (cmd) etwas gehen wie

        
      set variable=`ssh nutzer@linux-host shell-befehl(e)`  
      echo %variable%
      

      oder:

      ssh nutzer@linux-host shell-befehl(e) > datei.txt

      Datei.txt landet auf dem Windows-Rechner!

      Es könnte aber sogar einen Editor geben, dem man die Daten über die Konsole (cmd) "hinten reinschieben" kann:

      ssh nutzer@linux-host shell-befehl(e) | DeinEditor.exe

      Ganz genaues kann ich hierzu nicht sagen, da ich solche Bockstürze nicht machen muss und für die kleinen Probleme (ssh oder openssh ... muss Pfad angegeben werden oder kann man die Dateien nach %WINDIR%/system verschieben) keine Lust habe Windows anzuwerfen.

      Jörg Reinholz