Bash:как использовать sed для замены только последнего вхождения в файле?

Имея файл, содержащий повторяющиеся строки с комментариями, например:

# ScriptAlias /cgi-bin/ "somepath"
# ScriptAlias /cgi-bin/ "otherpath"

Я хочу добавить строку только после последнего вхождения, что приводит к

# ScriptAlias /cgi-bin/ "somepath"
# ScriptAlias /cgi-bin/ "otherpath"
ScriptAlias /cgi-bin/ "mypath"

Для этого я использую эту команду:

sed -i 's:^\(.*ScriptAlias /cgi-bin/.*\):\1 \nScriptAlias /cgi-bin/ "mypath":' file

Но это приводит к добавлению моей строки после каждого вхождения, например:

# ScriptAlias /cgi-bin/ "somepath"
ScriptAlias /cgi-bin/ "mypath"
# ScriptAlias /cgi-bin/ "otherpath"
ScriptAlias /cgi-bin/ "mypath"

Как я могу указать sed заменить только последнее вхождение ?

EDITED:
Если нет способа решить эту проблему с помощью sed (, как указано в комментариях ), пожалуйста, предоставьте альтернативы, достигающие того же результата, спасибо.



EDITED:
Повторяющиеся строки могут быть разделены и с другими строками между ними, например

# ScriptAlias /cgi-bin/ "somepath"
# ScriptAlias /cgi-bin/ "otherpath"

# ScriptAlias /cgi-bin/ "another-path"
ScriptAlias /foo/ "just-jump"
# ScriptAlias /cgi-bin/ "that's the last"
5
задан Luca Borrione 11 April 2012 в 13:36
поделиться