sed Frage.



  • Hallo,

    ich habe eine Textdatei, in welcher die erste Zeile immer wie folgt aussieht:

    VariablerText.o:
    

    Ich möchte nun mittels sed diesen Text umwandeln in:

    VariablerText.o VariablerText.a:
    

    Hat jemand Tipps, wie dies gelingen könnte, oder wo man nachschauen sollte? Also ich meine nicht die sed manual, denn da habe ich schon reingeschaut, bin aber gescheitert.

    Danke.



  • In der Annahme, dass die erste Zeile beim ':' endet

    sed 's/^\(.*\).o:$/\1\.o\ \1\.a:/g'
    

    Sed ist einfach, wenn du Regular Expresions verstanden hast, dann hast du mehr als du brauchst, um sed Srkipt zu screiben.

    sed kennt Befehle wie 'print' (p) , 'replace' (s), und diese werden am Anfang immer angebenen. Was danach kommt, hängt vom Befehl ab (siehe man page).

    Du kannst in Regular Expresions dir bestimmte Teile merken, das geht mit den runden Klammern. Dabei ist es wichtig, diese zu Escapen, denn '(ab)' ist unterschiedlich zu '\(ab\)'. Die erste Regel würde nur bei ...(ab)... übereinstimmen, jedoch die zweite bei ...ab... ...aaaabaaa...., usw.

    Dieses Merken mit den runden Klammern hat den Vorteil, dass du beim Ersetzen darauf zureifen kannst: \1, \2, \3, \4 usw. \1 entspricht der ersten Klammerung, \2 der zweiten, usw.

    Mit '^\(.*\).o:$' sage ich: Ausgehend von Zeilenanfang (wegen ^) merkt dir alles, bis die Zeile mit '.o' endet (wegen $)

    Die Ersetzungsregel '\1\.o\ \1\.a:' sagt nämlich, dass alles, was mit der Such-Regel übereinstimmt, mit der Ersetzungsregel ersetzt wird, wobei \1 der ersten Klammerung entspricht, usw.


Anmelden zum Antworten