eine Datei mit wiederholt kommentierten Zeilen zu haben mögen:Bash: wie sed zu verwenden, um nur das letzte Vorkommen in einer Datei zu ersetzen?
:# ScriptAlias /cgi-bin/ "somepath"
# ScriptAlias /cgi-bin/ "otherpath"
ich eine Linie erst nach dem letzten Auftreten was
# ScriptAlias /cgi-bin/ "somepath"
# ScriptAlias /cgi-bin/ "otherpath"
ScriptAlias /cgi-bin/ "mypath"
Dazu verwende ich diesen Befehl hinzufügen möchten
sed -i 's:^\(.*ScriptAlias /cgi-bin/.*\):\1 \nScriptAlias /cgi-bin/ "mypath":' file
Aber dies führt meine Linie nach jedem Auftreten in der Zugabe wie:
# ScriptAlias /cgi-bin/ "somepath"
ScriptAlias /cgi-bin/ "mypath"
# ScriptAlias /cgi-bin/ "otherpath"
ScriptAlias /cgi-bin/ "mypath"
Wie kann ich sed sagen, nur das letzte Vorkommen zu ersetzen?
EDITED:
Wenn es keine Möglichkeit, es zu lösen ist mit sed (wie in den Kommentaren gesagt), bitte Alternativen bieten das gleiche Ergebnis zu erreichen, danke.
EDITED:
Die wiederholten Linien separeted und mit anderen Linien zwischen ihnen werden kann wie
# ScriptAlias /cgi-bin/ "somepath"
# ScriptAlias /cgi-bin/ "otherpath"
# ScriptAlias /cgi-bin/ "another-path"
ScriptAlias /foo/ "just-jump"
# ScriptAlias /cgi-bin/ "that's the last"
Dies ist kein Job für sed. Vielleicht awk, aber ich würde es in Python oder Perl tun. –
@ MK.Ok .. Ich habe nach sed gefragt, weil ich es benutzt habe. Wenn es keine Möglichkeit gibt, es mit sed zu lösen, ist jede andere Methode willkommen. Danke –
Oh, du kannst es mit sed machen, es ist meiner Meinung nach einfach nicht ideal. –