Text-Processing

如果找到某些文本,則在標籤(包括)之間列印文本

  • May 23, 2014

我的任務是從多個 Apache 伺服器中提取數據。任務是列印:

<Directory ...>
 ...
</Directory>

+ExecCGI 位於其中。讓我舉一個例子來說明。假設 Apache 配置文件有許多 Directory 部分,如下所示:

<Directory /var/www/site1/htdocs>
 Options +ExecCGI
 ...
 ...
</Directory>
...
...
...
<Directory /var/www/site1/Promo>
 Options -ExecCGI
 ...
 ...
</Directory>

從上面,我只想得到以下輸出:

<Directory /var/www/site1/htdocs>
 Options +ExecCGI
 ...
 ...
</Directory>

我搜尋了論壇,發現人們在文章中詢問如何列印標籤之間的整個部分(我知道如何做到這一點),或者在找到時更改某些文本(再次,我知道如何做到這一點)。

我會將 +ExecCGI 更改為 -ExecCGI,但更改需要經過審查過程,因此需要通過這個問題,以便我可以提取這些數據。

perl -l -0777 -ne 'for (m{<Directory.*?</Directory>}gs) {print if /\+ExecCGI/}'

或者使用 GNU grep

grep -zPo '(?s)<Directory(?:.(?!</Directory))*?\+ExecCGI.*?</Directory>'

您可能還可以使用awk

awk 'BEGIN{RS="</Directory>\n"; ORS=RS} /\+ExecCGI/ {print}' file

引用自:https://unix.stackexchange.com/questions/131476