Puppet
如何列印正則表達式匹配
我的問題是雙重的。首先是列印正則表達式匹配。第二個是實際的正則表達式。
問題 1:我正在嘗試將 yum grouplist –verbose 的輸出列印成可以放入 puppet conf 文件的格式。因此,我需要列印的不僅僅是匹配項,因此 sed 和 grep -o 不起作用(至少我不知道)。
以下是一些輸出的範例:
Maori Support (maori-support) [mi] Mongolian Support (mongolian-support) [mn] Mynamar (Burmese) Support (burmese-support) [my] Nepali Support (nepali-support) [ne]
我希望將所有包含 (*-support) 的輸出行列印為:
'maori-support': ensure => absent; 'mongolian-support': ensure => absent; 'burmese-support': ensure => absent; 'nepali-support': ensure => absent;
我已經手動完成了,但是為了知識,我想弄清楚如何將其作為一條線來完成。
我試過 awk 和 perl 無濟於事。我能得到的最接近的是像這樣使用 perl:
$ yum grouplist --verbose | perl -nwe 'print "$1: ensure\t=> absent;\n" if /\((.+-support)\)'
**問題 2:**但是,這不包括輸出中的單引號。還有一個問題是其中一條輸出線如下所示:
Mynamar (Burmese) Support (burmese-support) [my]
上面的正則表達式匹配第一個左括號中的所有內容。我不知道如何讓它從第二個括號開始比賽。我嘗試將正則表達式修改為非貪婪的?但它只是繼續不匹配(緬甸)支持(緬甸支持)
yum grouplist --verbose 2>/dev/null | sed -n "s/.*(\([^)]\+-support\)).*/'\1': ensure => absent;/p"
對 sed 腳本使用雙引號,因為您不能在單引號字元串中嵌入單引號。
使用您的範例輸入:
echo " Maori Support (maori-support) [mi] Mongolian Support (mongolian-support) [mn] Mynamar (Burmese) Support (burmese-support) [my] Nepali Support (nepali-support) [ne] " | sed -n "s/.*(\([^)]\+-support\)).*/'\1': ensure => absent;/p"
'maori-support': ensure => absent; 'mongolian-support': ensure => absent; 'burmese-support': ensure => absent; 'nepali-support': ensure => absent;