Как избежать обратной косой черты в сценарии sed, встроенном в сценарий bash

Я хочу отредактировать файл через sed сценарий в сценарии bash. Я хочу, чтобы это было легко поддерживать позже; легко понять и изменить. Строка замены выглядит так:

PS1='\[\e[1;32m\][\u@\h \W]\$\[\e[0m\]'

В идеальном мире это было бы так:

sed -i "s/^PS1.*$/PS1='\[\e[1;32m\][\u@\h \W]\$\[\e[0m\]'/g" /etc/skel/.bashrc

Проблема в том, что bash и sed удаляют \ , что дает следующий результат в файле:

PS1='[e[1;32m][@h W]$[e[0m]'

] Очевидно, что одинарные кавычки использовать нельзя. Решением грубой силы является использование экранирования, но для того, чтобы это сработало, я получаю действительно некрасивую строку:

sed -i "s/^PS1.*$/PS1='\\\\[\\\\e[1;32m\\\\][\\\\u@\\\\h \\\\W]\\\\$\\\\[\\\\e[0m\\\\]'/g" /etc/skel/.bashrc

Я хочу, чтобы сценарий был читабельным и самодостаточным (без использования внешних файлов). Есть ли альтернативы вышеуказанному?

8
задан hauptmech 4 January 2012 в 17:35
поделиться