Adiciona linha ao arquivo de configuração de um script bash?

1

Estou tentando localizar uma linha em um arquivo de configuração e, em seguida, soltar duas linhas para inserir uma linha de código. Eu estava tentando fazer isso no awk / sed, mas fiquei preso no retorno da carruagem. Eu não amarrei o awk / sed mas procurei uma maneira limpa de conseguir isso.

<Location />
  Order allow,deny
</Location>

Em seguida, adicione uma linha nesse bloco:

<Location />
  Order allow,deny
  Allow all
</Location>
    
por tkrn 06.01.2016 / 19:57

4 respostas

1

awk pode ser usado para isso. O script abaixo só adicionará texto depois de encontrar uma tag <Location /> .

awk '/\<Location \/\>/{ start=1 } {if(start) ++start; if(start==4) print "  Allow all"} 1' infile

Para o arquivo de entrada abaixo:

stuff
<Location />
  Order allow,deny
</Location>
more
stuff

Este script produz:

stuff
<Location />
  Order allow,deny
  Allow all
</Location>
more
stuff

Se você quiser substituir várias seções como essa, o mesmo script pode ser facilmente adaptado:

awk '/\<Location \/\>/{ start=1 } {if(start) ++start; if(start==4){print "  Allow all"; start=0}} 1' infile
    
por 06.01.2016 / 20:07
2
sed '/Order allow,deny/ aAllow all' < yourFile

Isso gerará o arquivo modificado para stdout . Se você quiser modificá-lo no local, então ( sed (1) ):

-i[SUFFIX], --in-place[=SUFFIX]

          edit files in place (makes backup if SUFFIX supplied)

Explicação:

For each line that matches '/Order allow,deny/':
     Execute command 'a' (append) with 'Allow all' as parameter
O

link é um recurso excelente para saber mais sobre sed .

    
por 06.01.2016 / 20:07
1

Se você simplesmente quiser adicionar a instrução Allow all depois de qualquer Order allow,deny , a seguinte sed funcionará

sed -i 's/Order\ allow,deny/Order\ allow,deny\nAllow\ all/' <inputfilename>
    
por 06.01.2016 / 20:04
0

Você pode usar o Vim no modo Ex:

ex -sc '/Order allow,deny/a|Allow all' -cx file
  1. a acrescentar texto e nova linha

  2. x salvar e fechar

por 17.04.2016 / 08:09