Estou tentando escrever um script que substitua essa linha:
[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
com essa linha:
# [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
e isso adicionará essa nova linha:
[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \D{%T} \W]\\$ "
para o /etc/bashrc
arquivo. Basicamente, quero que o script comente as configurações antigas e adicione um carimbo de data/hora ao lado do nome de usuário no prompt (a nova configuração). Eu tentei fazer a primeira parte assim:
pattern=' [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "'
sudo sed 's/${pattern}/#${pattern}/' < /etc/bashrc
Mas não funcionou, acho que é por causa dos caracteres especiais na string. Mas não tenho certeza de quais caracteres preciso escapar. A última parte deveria ser algo assim:
sed -i ' [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \D{%T} \W]\\$ "' /etc/bashrc
Apreciará alguma orientação.
Obrigado
sed
script impedem que o${pattern}
seja expandido. Você teria que usar aspas duplas (mas isso levaria ao problema mencionado com caracteres especiais)sed
o endereçamento com o suficiente da linha fornecida para identificá-lo e, em seguida, insira o comentário assim:/^ *\[ *"$PS1 =/s/^/#/
a
comando desed
para anexar uma determinada linhaNo seu caso, você só quer adicionar algo à linha, então
Se você deseja substituir uma linha inteira sem regex, também pode obter o número da linha primeiro:
e substitua a linha pelo padrão comentado e nova linha:
Este também é mais claro para ler meses depois.
Para fins de teste, sempre prefiro sed em um arquivo temporário primeiro (sem a opção -i) e renomeá-lo mais tarde para não prejudicar minha configuração.
Mas também descobri que esse método não funciona com padrões contendo
[,],$ and &
, os padrões também precisam de algum mascaramento nesta ordem:o que leva à seguinte função:
Para fazer esse tipo de substituição de padrão complexo por sed:
você tem que forçar a avaliação
pattern
desta forma:Verifique se isso atinge exatamente o que você deseja no arquivo temporário antes de tentar tocar
/etc/bashrc
e usarsudo
(além disso, antes de usar,sudo
você deve verificar se realmente está usando o correto para evitar o uso de um falso).