テキストブロックの各行の前に#を追加するには?

テキストブロックの各行の前に#を追加するには?

これは私の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>

#最初の行から始めて、各行を<Directory>まで追加したいと思います</Directory>。どうすればいいですか?

答え1

vimを使用してこれを行う方法はいくつかあります。

1 - 視覚的な選択

視覚的選択に関するMikhail Krutovのコメントの詳細な説明は次のとおりです。

  • /Directory最初の一致を探す
  • Shift+ v(ビジュアルモード)
  • /Directory>すべて選択(見つかるまで選択Directory>
    • 検索を使用する代わりに、ダブルクリックして2つの段落を選択することもできます}
  • :'<,'>s/^/#/gすべての「行の最初の文字」を#に置き換えます。
    • :'<,'>:Vimは、あなたが選択したもので何かをしたいことを知っているので、あなたが入力したときにオートコンプリートすることができます。

2 - ビジュアルブロックの選択

DopeGhotiとlgeorgetは次のように語った。

  • ビジュアルブロックを選択するにはControl+をクリックします。v
  • }二度叩く
  • クリックしてI#クリックEsc

3 - マクロ

別の方法はマクロを使用することです。唯一の注意点は、マクロを記録した後にマクロを何回繰り返すべきかを知る必要があることです(set nu友人が精神的に与えることができるようにすることができます)。

  • qq- qというマクロ記録を開始します。
  • I#- 行の先頭に文字を挿入します#Esc挿入モードを終了するにはクリックしてください。
  • jq1行を押して録音を停止します。
  • 17@qこのマクロを17回実行します。

答え2

Perlを使用すると、次のように簡単です。

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

秘密は3つの点の演算子です(2つの点の演算子は、行が同じ行に<Directory> ない限り動作します)。</Directory>

  • /<Directory/ ... /<\/Directory/これら2つの正規表現の間のすべての行に一致します。
  • /<Directory/ && !$done$done = true;with in a block($done最初はデフォルトではfalse)は、<Directory>最初のブロックのみが一致することを保証します。
  • -pe$_コードブロックを実行した後、標準入力を1行ずつ読み込んで出力します。
  • s/^/#/prependに一致する各行を修正します#

関連情報