search replace of string in file



  • sed ist grausam...

    awk sieht einfacher aus...
    wie kann ich den text ueber mehrere zeilen ersetzen? new line mit \n hinzufuegen? was ist hier falsch?

    find1="cat <<- EOF_CAT > etc/apt/apt.conf.d/99norecommends\n
    APT::Install-Recommends \"0\";"
    replace1="cat <<- EOF_CAT > etc/apt/apt.conf.d/99norecommends\n
    Acquire::http { Proxy \"http://192.168.0.111:82\"; };\n
    APT::Install-Recommends \"0\";"
    
    awk -v var1="$find1" -v var2="$replace1" '{
    	gsub(var1,var2)
    	print
    }' myotherscript.sh > temp
    mv temp myotherscript.sh
    


  • Kannst du vielleicht kurz beschreiben, was du insgesamt vorhast? Das sieht sehr sehr falsch aus, auch wenn du nur an den Multiline-Replacements scheiterst.

    sed ist nicht grausam, sed arbeitet einfach nur zeilenorientiert, darum kannst du es für sowas nicht (bequem) verwenden.



  • ich will mit awk multi line find and replace machen:

    find string (2 lines, ohne escaping):
    cat <<- EOF_CAT > etc/apt/apt.conf.d/99norecommends
    APT::Install-Recommends "0";

    replace string (3 lines, ohne escaping):
    cat <<- EOF_CAT > etc/apt/apt.conf.d/99norecommends
    Acquire::http { Proxy http://192.168.0.111:82"; };
    APT::Install-Recommends "0";



  • nun mit formatierung:

    ich will mit awk multi line find and replace machen:

    find string (2 lines, ohne escaping): 
    cat <<- EOF_CAT > etc/apt/apt.conf.d/99norecommends 
    APT::Install-Recommends "0"; 
    
    replace string (3 lines, ohne escaping): 
    cat <<- EOF_CAT > etc/apt/apt.conf.d/99norecommends 
    Acquire::http { Proxy "http://192.168.0.111:82"; }; 
    APT::Install-Recommends "0";
    


  • wobei find and replace shell variablen sind:

    find1="cat <<- EOF_CAT > etc/apt/apt.conf.d/99norecommends
    APT::Install-Recommends \"0\";" 
    replace1="cat <<- EOF_CAT > etc/apt/apt.conf.d/99norecommends
    Acquire::http { Proxy \"http://192.168.0.111:82\"; };
    APT::Install-Recommends \"0\";"
    


  • linux_neb schrieb:

    ich will mit awk multi line find and replace machen

    Du missverstehst mich. Was ist das eigentliche Ziel? Von einem Shellscript aus ein anderes Shellscript umzueditieren klingt wackelig und nach einer schlechten Idee.

    http://meta.stackexchange.com/a/66378

    Mit Awk kannst du sowas bestimmt machen, aber ich halte dein Ziel generell für eine sehr sehr schlechte Idee.

    Mit Perl ist das übrigens ziemlich leicht, da solltest du ungefähr sowas machen können:

    ~ % echo "foo\nbar" > file.txt
    ~ % perl -0pi -e "s/foo\nbar/foobar/g" file.txt
    ~ % cat file.txt 
    foobar
    

    Aber wie gesagt: Erklär lieber, was dein Ziel ist; das da oben wirkt ziemlich widerwärtig (und wäre auch mit awk nicht besser).



  • das eigentlich ziel ist 2 zeilen mit 3 zeilen in einem file zu aendern.



  • Wozu?



  • weil ich ein makefile habe das ein ubuntu image erstellt und ich ein shell script editiere und die proxy server settings hinzufuege...



  • Pack die Proxy-Settings doch einfach in eine neue Datei.

    Z.B. nach /etc/apt/apt.conf.d/99proxysettings oä. folgendes:

    Acquire::http { Proxy "http://192.168.0.111:82"; };
    

    Die Proxy-Settings haben schließlich rein gar nichts damit zu tun, ob Recommendations auch installiert werden sollen oder nicht.



  • ok, stimmt.

    wie kann ich verhindern, dass proxy username u password als plain text im file /etc/apt/apt.conf.d/99proxysettings abgespeichert werden?

    soll ich am ende nach allen apt-get updated das file wieder loeschen?



  • linux_neb schrieb:

    wie kann ich verhindern, dass proxy username u password als plain text im file /etc/apt/apt.conf.d/99proxysettings abgespeichert werden?

    Gar nicht.

    soll ich am ende nach allen apt-get updated das file wieder loeschen?

    Nein, verpass dem File einfach die Rechte 0400 und fertig. Der Proxy-Account ist normalerweise nicht allzu spannend und die selben Credentials verwendest du sonst ja hoffentlich nirgends.


Anmelden zum Antworten