天天看點

grep 指令系列:如何隻檢視配置檔案中未被注釋的有效配置行grep 指令系列:如何隻檢視配置檔案中未被注釋的有效配置行

大多數的linux和類unix系統的配置檔案中都有許多的注釋行,但是有時候我隻想看其中的有效配置行。那我怎麼才能隻看到quid.conf或httpd.conf這樣的配置檔案中的非注釋指令行呢?怎麼去掉這些注釋或者空行呢?

我們可以使用 unix/bsd/os x/linux 這些作業系統自身提供的 grep,sed,awk,perl或者其他文本處理工具來檢視配置檔案中的有效配置指令行。

grep 指令系列:如何隻檢視配置檔案中未被注釋的有效配置行grep 指令系列:如何隻檢視配置檔案中未被注釋的有效配置行

可以按照如下示例使用grep指令:

<code>$ grep -v "^#" /path/to/config/file</code>

<code>$ grep -v "^#" /etc/apache2/apache2.conf</code>

示例輸出:

<code>serverroot "/etc/apache2"</code>

<code></code>

<code>lockfile /var/lock/apache2/accept.lock</code>

<code>pidfile ${apache_pid_file}</code>

<code>timeout 300</code>

<code>keepalive on</code>

<code>maxkeepaliverequests 100</code>

<code>keepalivetimeout 15</code>

<code>&lt;ifmodule mpm_prefork_module&gt;</code>

<code>startservers 5</code>

<code>minspareservers 5</code>

<code>maxspareservers 10</code>

<code>maxclients 150</code>

<code>maxrequestsperchild 0</code>

<code>&lt;/ifmodule&gt;</code>

<code>&lt;ifmodule mpm_worker_module&gt;</code>

<code>startservers 2</code>

<code>minsparethreads 25</code>

<code>maxsparethreads 75</code>

<code>threadlimit 64</code>

<code>threadsperchild 25</code>

<code>&lt;ifmodule mpm_event_module&gt;</code>

<code>user ${apache_run_user}</code>

<code>group ${apache_run_group}</code>

<code>accessfilename .htaccess</code>

<code>&lt;files ~ "^\.ht"&gt;</code>

<code>order allow,deny</code>

<code>deny from all</code>

<code>satisfy all</code>

<code>&lt;/files&gt;</code>

<code>defaulttype text/plain</code>

<code>hostnamelookups off</code>

<code>errorlog /var/log/apache2/error.log</code>

<code>loglevel warn</code>

<code>include /etc/apache2/mods-enabled/*.load</code>

<code>include /etc/apache2/mods-enabled/*.conf</code>

<code>include /etc/apache2/httpd.conf</code>

<code>include /etc/apache2/ports.conf</code>

<code>logformat "%v:%p %h %l %u %t \"%r\" %&gt;s %o \"%{referer}i\" \"%{user-agent}i\"" vhost_combined</code>

<code>logformat "%h %l %u %t \"%r\" %&gt;s %o \"%{referer}i\" \"%{user-agent}i\"" combined</code>

<code>logformat "%h %l %u %t \"%r\" %&gt;s %o" common</code>

<code>logformat "%{referer}i -&gt; %u" referer</code>

<code>logformat "%{user-agent}i" agent</code>

<code>customlog /var/log/apache2/other_vhosts_access.log vhost_combined</code>

<code>include /etc/apache2/conf.d/</code>

<code>include /etc/apache2/sites-enabled/</code>

<code>egrep -v "^#|^$" /etc/apache2/apache2.conf</code>

<code>## or pass it to the page such as more or less ##</code>

<code>egrep -v "^#|^$" /etc/apache2/apache2.conf | less</code>

<code>## bash function ######################################</code>

<code>## or create function or alias and use it as follows ##</code>

<code>## viewconfig /etc/squid/squid.conf ##</code>

<code>#######################################################</code>

<code>viewconfig(){</code>

<code>local f="$1"</code>

<code>[ -f "$1" ] &amp;&amp; command egrep -v "^#|^$" "$f" || echo "error $1 file not found."</code>

<code>}</code>

grep 指令系列:如何隻檢視配置檔案中未被注釋的有效配置行grep 指令系列:如何隻檢視配置檔案中未被注釋的有效配置行

圖 01: unix/linux egrep 除去注釋行和空行

<a></a>

-v 選項,選擇出不比對的指令行。該選項适用于所有基于posix的系統。正規表達式 <code>^$</code> 比對出所有的非空行,<code>^#</code> 比對出所有的不以“#”開頭的非注釋行。

可以按照如下示例使用 gnu 上的 sed 指令:

<code>$ sed '/ *#/d; /^ *$/d' /path/to/file</code>

<code>$ sed '/ *#/d; /^ *$/d' /etc/apache2/apache2.conf</code>

gnu 或 bsd 上的 sed 也可以修改配置檔案。下面的指令的作用是原地編輯檔案,并以特定(比如 .bak)備份檔案:

<code>sed -i'.bak.2015.12.27' '/ *#/d; /^ *$/d' /etc/apache2/apache2.conf</code>

本文來自雲栖社群合作夥伴“linux中國”

原文釋出時間為:2013-04-02.

繼續閱讀