Como posso acrescentar um # na frente de cada linha de um bloco de texto?

2

Isso faz parte do arquivo de configuração do meu PHP Myadmin:

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8

   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

<Directory /usr/share/phpMyAdmin/setup/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>

Eu quero adicionar # na frente de cada linha, começando do primeiro <Directory> e até </Directory> . Como posso fazer isso?

    
por The One 28.04.2016 / 11:04

2 respostas

3

Com o vim, há mais de uma maneira de fazer isso:

1 - Seleção visual

Uma explicação mais detalhada sobre o comentário de Mikhail Krutov sobre a seleção visual:

  • /Directory para encontrar a primeira correspondência
  • Shift + v (modo visual)
  • /Directory> para selecionar tudo (selecione até encontrar Directory>
    • Você também pode atingir } duas vezes para selecionar dois parágrafos em vez de usar a pesquisa.
  • :'<,'>s/^/#/g para substituir todos os "caracteres de início de linha" por #
    • O Vim provavelmente preencherá automaticamente :'<,'> quando você digitar : , pois sabe que você quer fazer algo com sua seleção.

2 - Seleção de bloco visual

Como comentado por DopeGhoti e lgeorget:

  • Pressione Controle + v para seleção de bloco visual
  • Acertar } duas vezes
  • Pressione I# e pressione Esc

3 - Macro

Outra maneira é usar macros. A única ressalva é que você precisa saber quantas vezes você tem que repetir uma macro depois de gravá-la ( set nu é seu amigo em ajudar a contar mentalmente as linhas):

  • qq - Inicia a gravação da macro com o nome q
  • I# - Insira no início da linha, o caractere # . Pressione Esc para sair do modo de inserção
  • Pressione jq para descer uma linha e parar de gravar
  • Pressione 17@q para executar essa macro 17 vezes.
por 28.04.2016 / 12:51
2

Com o perl, é tão fácil quanto:

perl -pe 'if ((/<Directory/ && !$done) ... /<\/Directory/) { $done = true; s/^/#/; }' < config_file

O truque são os operadores de três pontos (os dois pontos também funcionam, desde que <Directory> e </Directory> não estejam na mesma linha).

  • /<Directory/ ... /<\/Directory/ corresponde a todas as linhas entre essas duas expressões regulares.
  • /<Directory/ && !$done com $done = true; no bloco ( $done é inicialmente falso por padrão) garante que apenas o primeiro <Directory> bloco seja correspondido.
  • -pe lê a linha de entrada padrão por linha e a saída $_ depois de executar o bloco de código.
  • s/^/#/ modifica cada linha correspondida para pré-adicionar # .
por 28.04.2016 / 11:47