shell script para comentar ou descomentar uma linha - testando

2

Tentando remover um sinal # de uma única linha em um arquivo. A linha é atualmente

#/usr/bin/tvservice -o
if [[ '$grep tvservice /etc/rc.local' =~ ^# ]] ;
then sed -i '/^#.* tvservice /s/^#//' /etc/rc.local ;
else echo 1 fi

Tentando testar se esse comando funcionará antes de adicioná-lo a um script. Quando eu executo, recebo um símbolo > e tenho que parar a execução com Ctrl + C

Não estou passando uma string para grep corretamente ou o que? Eu sou relativamente novo nisso.

    
por Kylar Stern 24.02.2018 / 16:04

1 resposta

3

Eu sugiro que você teste sem % s -i do sed primeiro - ou use uma cópia local do arquivo rc.local .

Você não precisa para testar a presença da string, mas se fizer isso, a maneira correta de substituir a saída do grep seria "$(grep tvservice /etc/rc.local)" - o caminho você escreveu, testa a string literal $grep tvservice /etc/rc.local

No entanto, uma melhor maneira de IMHO seria fazer um grep para todo o padrão e usar o status de saída do grep diretamente, evitando o teste de regex de shell completamente:

if grep -q '^#.*tvservice' /etc/rc.local; then 
  sed -i '/^#.*tvservice/ s/^#//' /etc/rc.local
else 
  echo 1
fi

(Eu removi os espaços ao redor do padrão, já que o texto da sua amostra não os possui).

    
por steeldriver 24.02.2018 / 16:21