mit echo teil einer zeile in andere schreiben

  • Hi, all


    Ich kenne mich kaum aus mit der bash, aber will es lernen und verstehen, aber benötige Hilfe bei einem Problem. Google filft mir da leider nicht all zu viel...


    Folgende Situation:


    Datei1:

    Code
    blabla 23 bla
    abcd 12 hallo
    bla 34 blabla


    soll neu geschrieben werden in
    Datei2:

    Code
    ich bin es hallo


    also der reste Teil soll abgeschnitten werden und davor soll neuder Text stehen!


    Angefangen habe ich so:

    Code
    text=`cat Datei1 | grep abcd\ 12`
    echo "ich bin es $text" > Datei2


    und kriege dann logischer weise:

    Code
    ich bin es abcd 12 hallo


    nun fehlt mich nur noch der teil der vorn was abzwackt und da komm ich nicht weiter





    Mfg SVen

  • Moin,


    normalerweise sollte da awk oder cut Dein Freund sein. Falls Du weisst, dass ab dem dritten Wort der Zeile alles erhalten bleiben sollte, sieht das dann so aus:

    Code
    text=`cat Datei1 | grep abcd\ 12 | cut -d' ' -f3-`
    echo "ich bin es $text" > Datei2


    oder in einer Zeile:

    Code
    echo "Ich bin es "`grep 'abcd 12' Datei1 | cut -d' ' -f3-`


    Eine Anmerkung:

    Code
    cat Datei | grep foobar

    qualifiziert fuer den "Useless Use of cat award", da man grep auch einen Dateinamen mitgeben kann, wie oben gezeigt ... ;)


    Gruss


    /elle

  • Ich eröffne dann mal den Reigen der Alternativlösungen mit der sed-Lösung:


    Code
    sed -n -e "s/^abcd 12 \(.*\)/ich bin es \1/p" Datei


    Und weil wir schon dabei sind, das ist die bash-only Lösung:


    Code
    while read line ; do 
        if [ -z "${line##abcd 12 *}" -a ! -z "$line" ] ; then 
            echo "ich bin es ${line#abcd 12 }"
        fi
    done < file



    Für die weitere Lektüre kann ich übrigens nur auf die Original-Anleitung verweisen, da steht garantiert alles drin:
    http://www.gnu.org/software/bash/manual/bashref.html
    Man muss es nur finden. ;)


    Gruß,


    Udo

  • Zitat

    Ich eröffne dann mal den Reigen der Alternativlösungen mit der sed-Lösung:


    dann mach' ich gleich mal mit awk :tup weiter.


    Code
    awk '{ if (match($0, "^abcd 12 (.*)$", a)) print "ich bin es " a[1] }' datei

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!