Ich versuche, eine sed Befehl mit einem sed Befehl zu ersetzen und es fällt immer wieder nach so ein paar Stunden "Streikposten" Ich dachte, ich würde die Frage hier stellen.Ersetzen sed mit sed auf RHEL6.7
Ich habe verschiedene Bash-Skripte, die diese Art von Zeile enthalten:
sed 's/a hard coded server name servername.//'
Ich mag würde, sie ersetzen mit:
sed "s/a hard coded server name $(hostname).//"
Notiere die Zugabe von doppelten Anführungszeichen, so dass die $ (hostname) erweitert, was das ein wenig schwieriger macht, als ich erwartet habe.
also war meine erste von vielen Fehlversuchen:
cat file | sed 's!sed \'s\/a hard coded server name servername.\/\/\'!sed \"s\/a hard coded server name $(hostname).\/\/\"!g'
Ich habe versucht, auch mit dem Ersatz in Teile Option „-e“ ist schön, sed zu brechen, um zu versuchen und die Problembereiche abzielen. Ich würde nicht die „-e“ Schalter in einer Lösung verwenden, aber es ist nützlich, manchmal für das Debuggen:
cat file | sed -e 's!servername!\$\(hostname\)!' -e 's!\| sed \'s!\| sed \"s!'
Die ersten sed funktioniert wie erwartet (nichts Besonderes passiert hier) und die zweite nicht so keinen Sinn, das Hinzufügen drittens müsste das das schließende Doppelzitat ersetzen.
An diesem Punkt meine Geschichte steigt in Chaos, so dass kein Punkt mehr Fehlversuche hinzufügen.
Ich wollte die erste Ersetzung in einem einzigen Befehl verwenden, da das Skript voll von sed-Befehlen ist und ich nur einen bestimmten Befehl im Skript anvisieren wollte.
Irgendwelche Ideen würden geschätzt.
Sie können einfache Anführungszeichen nicht in einfache Anführungszeichen umwandeln, Sie müssen doppelte Anführungszeichen auf der Außenseite verwenden oder verwenden Sie "" für jedes einzelne Anführungszeichen. Das heißt, ob http://stackoverflow.com/q/29613304/258523 hier eine Hilfe ist. –
Setzen Sie nicht den ganzen sed-Befehl in Anführungszeichen oder Sie müssen sich Sorgen machen, dass sich bei zukünftigen Updates andere Dinge einschleichen. Lösen Sie einfach die einfachen Anführungszeichen für den Teil aus, den die Shell erweitern soll: 'sed 's/a hart codierter Servername' '$ (hostname)' '.// '' –
Ich dachte, ich hätte das einzige Zitat in dem Befehl korrekt gemerkt. Könnten Sie @Etan erweitern? – Chris