这是我的 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退出插入模式- 按
jq
向下一行并停止录制 - 按
17@q
执行此宏 17 次。
答案2
使用 Perl,就像这样简单:
perl -pe 'if ((/<Directory/ && !$done) ... /<\/Directory/) { $done = true; s/^/#/; }' < config_file
诀窍是三点运算符(只要 和<Directory>
不在</Directory>
同一行,两点运算符也可以工作)。
/<Directory/ ... /<\/Directory/
匹配这两个正则表达式之间的所有行。/<Directory/ && !$done
$done = true;
块中的with ($done
默认情况下最初为 false)确保仅<Directory>
匹配第一个块。-pe
$_
执行代码块后 逐行读取标准输入并输出。s/^/#/
修改与 prepend 匹配的每一行#
。