Я хочу запустить скрипт для поиска в файле /etc/bash.bashrc подстроки
PS1=
и заменить всю строку на:
PS1='\[\e[36m\]\h\[\e[m\]\[\e[33m\]@\[\e[m\]\[\e[33m\]\u\[\e[m\]:\[\e[32m\]\W\[\e[m\]>\\$ '
Эта новая строкапредназначен для изменения командной строки.
Я пробовал и пробовал sed в bash-скрипте, но не смог правильно указать регулярное выражение.
[Редактировать] Этот код теперь работает:
#!/bin/bash
custom_prompt='${debian_chroot:+($debian_chroot)}\[\e[36;40m\]\u\[\e[m\]\[\e[93m\]@\[\e[m\]\[\e[36m\]\h\[\e[m\]:\[\e[92m\]\w\[\e[m\]\[\e[92m\]\\$\[\e[m\]\[\e[93m\]>\[\e[m\]\'
### Setup Bash Prompt
# replace each \ for double \\ in the prompt string
sed_custom_prompt=$(<<<"$custom_prompt" sed 's/\\/\\\\/g')
# add this to /etc/bashrc for global effect
sed -i "s/PS1=.*/PS1=\"$sed_custom_prompt\"/" testrc
Единственная проблема заключается в том, что он выполняет PS1= " string "
вместо PS1 = ' string '
с обратными тиками.
Мне нужен простой старомодный скрипт без регулярных выражений, который находит строку и заменяет строку в файле. Regex может найти строку, но мое первоначальное утверждение испортило подстановку.
Мне все равно, является ли это perl, awk или bash. Мне просто нужно что-то, что работает.