Text-Processing
如果找到某些文本,則在標籤(包括)之間列印文本
我的任務是從多個 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