Não posso dar uma resposta definitiva sem ver o arquivo inteiro. Se houver apenas uma instância de if ! shopt -oq posix;
e 'você pode usar isso para delimitar a seção relevante:
perl -i -pe '$i++ if /^#if ! shopt -oq posix;/; s/^#// if $i==1; $i=0 if /^fi/' /etc/bash.bashrc
Este script define $i
a 1
na primeira vez que encontra uma linha que começa com #if ! shopt -oq posix;
. Ele volta para 0
se encontrar uma linha começando com fi
(não #fi
, porque o operador de substituição não terá mais comentários neste ponto). Então, se $i
for 1
, ele removerá os comentários do início da linha.
Notas
- Isso falhará se você tiver mais de uma linha começando com
#if ! shopt -oq posix;
- Ele falhará se você tiver um espaço após o
#
.
Uma abordagem muito melhor seria editar seu arquivo para que a seção relevante seja claramente delimitada usando outra coisa. Por exemplo, XXXstart
e XXXend
:
Depois, você pode fazer uma abordagem mais geral:
# enable bash completion in interactive shells
# XXXstart
#if ! shopt -oq posix; then
# if [ -f /usr/share/bash-completion/bash_completion ]; then
# . /usr/share/bash-completion/bash_completion
# elif [ -f /etc/bash_completion ]; then
# . /etc/bash_completion
# fi
#fi
#XXXend
Agora, use este script no arquivo:
perl -i -pe '$i=0 if /XXXend/; s/^\s*#*// if $i==1; $i=1 if /XXXstart/; ' /etc/bash.bashrc
Finalmente, não faça isso. Não mexa com /etc/bash.bashrc
. Basta adicionar essas linhas ao seu ~/.bashrc
arquivo e evitar alterar /etc/bash.bashrc
. Primeiro porque é mais limpo e seguro e segundo porque qualquer alteração feita no arquivo em /etc
será sobregravada pela próxima atualização.