search replace of string in file
-
soll ich hier sed verwenden?
from="cat <<- EOF_CAT > etc/apt/apt.conf.d/99norecommends\n\rAPT::Install-Recommends \"0\";" to="cat <<- EOF_CAT > etc/apt/apt.conf.d/99norecommends\n\rAcquire::http { Proxy \"http://192.168.0.111:82\"; };\n\rAPT::Install-Recommends \"0\";" sed -i 's/$from/$to/g' myotherscript.sh
-
leider weiss ich nicht wie ich eine variable im sed command verwenden kann...wie bekomm ich das zum laufen?
from1="cat <<- EOF_CAT > etc/apt/apt.conf.d/99norecommends\nAPT::Install-Recommends \"0\";" to1="cat <<- EOF_CAT > etc/apt/apt.conf.d/99norecommends\nAcquire::http { Proxy \"http://192.168.0.111:82\"; };\nAPT::Install-Recommends \"0\";" sed -i "s/$from1/$to1/g" myotherscript.sh
-
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.