大多数的Linux和类Unix系统的配置文件中都有许多的注释行,但是有时候我只想看其中的有效配置行。那我怎么才能只看到quid.conf或httpd.conf这样的配置文件中的非注释命令行呢?怎么去掉这些注释或者空行呢?
我们可以使用 UNIX/BSD/OS X/Linux 这些操作系统自身提供的 grep,sed,awk,perl或者其他文本处理工具来查看配置文件中的有效配置命令行。
grep 命令示例——去掉注释 可以按照如下示例使用grep命令:
1 2 3 $ grep -v "^#" /path/ to/config/ file $ grep -v "^#" /etc/ apache2/apache2.conf
示例输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 ServerRoot "/etc/apache2" LockFile /var/lock/apache2/accept.lockPidFile ${APACHE_PID_FILE} Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 </IfModule> <IfModule mpm_worker_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxClients 150 MaxRequestsPerChild 0 </IfModule> <IfModule mpm_event_module> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule> User ${APACHE_RUN_USER} Group ${APACHE_RUN_GROUP} AccessFileName .htaccess<Files ~ "^\.ht" > Order allow ,deny Deny from all Satisfy all </Files> DefaultType text/plainHostnameLookups Off ErrorLog /var/log/apache2/error.logLogLevel warnInclude /etc/apache2/mods-enabled/*.loadInclude /etc/apache2/mods-enabled/*.confInclude /etc/apache2/httpd.confInclude /etc/apache2/ports.confLogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combinedLogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combinedLogFormat "%h %l %u %t \"%r\" %>s %O" commonLogFormat "%{Referer}i -> %U" refererLogFormat "%{User-agent}i" agentCustomLog /var/log/apache2/other_vhosts_access.log vhost_combinedInclude /etc/apache2/conf.d/Include /etc/apache2/sites-enabled/
想要跳过其中的空行,可以使用 egrep 命令 , 示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 egrep -v "^#|^$" /etc/apache2/apache2.conf ## or pass it to the page such as more or less ## egrep -v "^#|^$" /etc/apache2/apache2.conf | less ## Bash function ###################################### ## or create function or alias and use it as follows ## ## viewconfig /etc/squid/squid.conf ## ####################################################### viewconfig(){ local f="$1" [ -f "$1" ] && command egrep -v "^#|^$" "$f" || echo "Error $1 file not found." }
示例输出:
图 01: Unix/Linux Egrep 除去注释行和空行
理解 grep/egrep 命令行选项 -v 选项,选择出不匹配的命令行。该选项适用于所有基于posix的系统。正则表达式 ^$
匹配出所有的非空行, ^#
匹配出所有的不以“#”开头的非注释行。
sed 命令示例 可以按照如下示例使用 GNU 上的 sed 命令:
1 2 3 $ sed '/ *#/d; /^ *$/d' /path/to/file $ sed '/ *#/d; /^ *$/d' /etc/apache2/apache2.conf
GNU 或 BSD 上的 sed 也可以修改配置文件。下面的命令的作用是原地编辑文件,并以特定(比如 .bak)备份文件:
1 2 sed -i'.bak.2015.12.27' '/ *#/d; /^ *$/d' /etc/apache2/apache2.conf
更多信息见参考手册 - grep(1) , sed(1) 。
via: http://www.cyberciti.biz/faq/shell-display-uncommented-lines-only/
作者:Vivek Gite 译者:sonofelice 校对:wxy
本文由 LCTT 原创编译,Linux中国 荣誉推出