sed -Befehl, Musterroutine



  • Hallo Leute,

    ich habe eine sehr kleine Frage, bloss im Moment habe ich einen Blackout 😞

    Ich habe ein Unix-Shellskripte, welches mir in verschieden Dateien mit grep einen Prozess-ID sucht.
    Ich lese aus einer Datei den aktuellen PID meines Programms und suche mit grep , nach dem PID, alles kein Problem:

    Aber von grep bekomme ich den Ausruckwieder: dateiname.pid:1683 (Also der Dateiname:der gefundene PID) ...aber ich benötige nur den Dateiname ohne ".pid" und was dahinter kommt.

    Ich weiss, dass das mit sed geht, komme aber nicht drauf. Kann mir jemand helfen? 😕

    Danke! 👍

    Gruss Alex



  • Wenn Du von dem "grep"-Output alles bis zum ".pid" haben willst, geht das so:

    grep [i][...][/i] | sed -e 's/^\(.*\)[.]pid/\1/g' > [i]Ausgabedatei[/i]
    

    Das "-e" kannst Du auch weglassen, wenn bei "sed" sonst keine Parameter angegeben sind.



  • echo "foo.bla:87" | sed -e 's/\(.*\)\..*/\1/'
    

    <edit>
    *grml* langsamer und dann auch noch die schlechtere Version 😞
    </edit>



  • Hallo Martin,

    danke für die Antwort ...
    Ich habe das Problem, wenn ich das sed über den String "halle.pid:1707" den ich vom grep bekomme laufen lasse:

    kriege ich nur "l:1707" zurück 😞

    ich mache das mit

    grep 1707 *.pid |sed -e 's/^\(.*\)[.]pid/\l/g'
    

    Kannst du mir eventl. erklären was das einzeln bewirkt, dass soll ja hier keine Auftragslösung sein, sondern Hilfe zu Selbsthilfe. 😕 wäre nett!

    Danke Dir

    Gruss Alex



  • Hallo Leute,

    funktionier wunderbar @Rüdiger ... dickes Bienchen an Euch ...

    @Rüdiger könntest du mir kurz die Syntax erklären , wegen Hilfe zur Selbsthilfe???

    Danke!!!

    Gruss Alex



  • Hallo Leute,

    funktionier wunderbar @Rüdiger ... dickes Bienchen an Euch ...

    @Rüdiger könntest du mir kurz die Syntax erklären , wegen Hilfe zur Selbsthilfe???

    Danke!!!

    Gruss Alex



  • Sorry, ich habe ein ".*" am Ende der Sequenz vergessen. So geht's:

    > echo "halle.pid:1707" | sed -e 's/^\(.*\)[.]pid.*/\1/g'
    halle
    

    Dein Fehler war zudem, dass Du am Ende ein "l" (el) statt einer "1" (eins) hattest! Beides sieht bei dem Zeichensatz dummer Weise gleich aus. Solche Sequenzen am besten mit "Copy and Paste" übertragen, nicht abtippen.

    Wie's funktioniert:
    o "s" = Kommando (search and replace)
    o s/Suchtext/Ersetzungstext/g (g steht für "global")
    o Im Suchtext können Bereiche mit \( \) markiert werden, die dann mit \1 \2 ... im Ersetzungstext wieder eingebaut werden.
    o "^" = Zeilenanfang, "." = beliebiges Zeichen, "*" = beliebig oft



  • Hi Leute,

    funktioniert wunderbar, hab das mit dem Copy-Paste auch bemerkt, als ich es genau aufgeschrieben habe, und es null und nichtig funktioniert hat, habe ich mit Copy-Paste Erfolg gehabt 😉

    Solangsam komme ich auch hinter die Syntax... ein wenig gewöhnungsbedürftig, aber logisch.
    Muss aber gestehen ... richtig 100%tig habe ich es noch nicht verinnerlicht 🙄 ...aber mal schaun!

    Danke Euch für Eure Hilfe!!! 👍

    Schönes WE!

    Gruss Alex


Anmelden zum Antworten