道歉 - 現在編輯標題 - 標題最初與我想要的相反。不包括awk和sed中模式匹配的最後一行,但包括第一個
我想包括模式的第一行,以及每一行直到結束模式的發生。結束模式是開始模式的一個子集,所以sed的行爲與AWK不同。
這樣做的目的是構建一個枚舉思科ASA對象組類型網絡的bash函數。
此外,如果輸出行中的任何行包含「組對象」 - 那麼該組對象也需要枚舉。我肯定有一些循環,如果和awk的和/或sed的這可以完成。
例如
object-group network OBJECT-GROUP-DADDY
network-object 10.1.1.0 255.255.255.0
network-object 10.2.1.0 255.255.255.0
group-object NESTED-OBJECT-GROUP
network-object 10.3.1.0 255.255.255.0
object-group network ANY-OTHER-OBJECT-GROUP
network-object 10.1.1.0 255.255.255.0
object-group network NESTED-OBJECT-GROUP
network-object 10.11.1.0 255.255.255.0
network-object 10.22.1.0 255.255.255.0
將返回:
object-group network OBJECT-GROUP-DADDY
network-object 10.1.1.0 255.255.255.0
network-object 10.2.1.0 255.255.255.0
group-object NESTED-OBJECT-GROUP --+ EXPANDED BELOW
----network-object 10.11.1.0 255.255.255.0
----network-object 10.22.1.0 255.255.255.0
此刻 - 我甚至不能得到的第一部分工作(不枚舉嵌套組) 此外 - 嵌套組,本來嵌套組! argh
sed -n '/object-group network OBJECT-GROUP-DADDY/,/object-group network/p' ASA_CONFIG.cfg
給我我需要什麼,但確實包括END模式的第一行,這是我不關心的對象組的開始。
awk的版本似乎並不返回任何東西,我猜,因爲最終模式是啓動模式的子字符串:
awk '/object-group network OBJECT-GROUP-DADDY/,/object-group network/p' ASA_CONFIG.cfg
有一個關於這個未來使用和標誌指南,但是我無法從一堆不同的網站上找到它的頭或尾。
這裏OK添加信息:
在回答你的問題,沒有我不知道awk的語言,也沒有sed的。我是一名網絡工程師 - 我想對那些沒有涉足該領域的人來說,爲什麼我想實現這一點對你來說是個謎。我在編程上很糟糕,而且我的linux非常弱。
訪問列表ACCESS-LIST擴展許可證IP對象組SOURCE-OBJECT-GROUP對象組目的地對象 - :
在Cisco ASA配置中的訪問控制列表通常與這樣的訪問列表建GROUP
大寫字母的任何內容都由人類輸入,某些時間點,小寫字母由cisco保留,用於解析等。「對象組」與編程語言中的數組類似。這些訪問列表還可能包含多個行,或者有明確定義的網絡,而不是使用對象組。
我想枚舉所有的對象組條目,對於指定訪問列表中的源和目標對象組。這些對象組的格式如下
object-group network DESTINATION-OBJECT-GROUP
network-object 10.33.1.0 255.255.255.0
network-object 10.44.1.0 255.255.255.0
object-group network ANY-OTHER-OBJECT-GROUP
network-object 10.1.1.0 255.255.255.0
object-group network SOURCE-OBJECT-GROUP
network-object 10.1.1.0 255.255.255.0
network-object 10.2.1.0 255.255.255.0
group-object NESTED-OBJECT-GROUP
network-object 10.3.1.0 255.255.255.0
object-group network NESTED-OBJECT-GROUP
network-object 10.11.1.0 255.255.255.0
network-object 10.22.1.0 255.255.255.0
在上述例子中,使用前面介紹的訪問控制列表,我想源對象組輸出:然而
object-group network SOURCE-OBJECT-GROUP
network-object 10.1.1.0 255.255.255.0
network-object 10.2.1.0 255.255.255.0
group-object NESTED-OBJECT-GROUP
network-object 10.3.1.0 255.255.255.0
注意到這個名爲SOURCE-OBJECT-GROUP的對象組也包含一個組對象,這是一個保留字,這意味着 - 這是一個嵌套對象組,需要從配置中的其他位置讀入。
所以輸出將需要:
object-group network SOURCE-OBJECT-GROUP
network-object 10.1.1.0 255.255.255.0
network-object 10.2.1.0 255.255.255.0
group-object NESTED-OBJECT-GROUP
---enumerated----network-object 10.3.1.0 255.255.255.0
network-object 10.3.1.0 255.255.255.0
我們不希望從其他對象羣體不屬於訪問列表的一部分,或不嵌套在頂層訪問列表中的任何輸出。這個概念與Active Directory中的嵌套組相似。
生病現在試圖給你一些僞代碼:
AWK使用AWK打印$ 6打印從訪問列表對象羣名稱/變量和awk打印$ 9
訪問列表訪問 - LIST擴展許可證ip對象組SOURCE-OBJECT-GROUP對象組DESTINATION-OBJECT-GROUP
將這些每個存儲爲一些變量,然後枚舉。 像$源對象的組名,$目標對象羣名稱
功能羅列對象組輸入$源對象的組名
所以,如果$源對象組-name =「SOURCE-OBJECT-GROUP」做一些不符合「SOURCE-OBJECT-GROUP1」的顯式模式匹配,(某種grep -w風格的東西)打印下面的每一行。這是因爲許多對象羣體,只是其他人的名字而已。例如像運行是運行的一個子
(1)打印 「標題行」 對象組網絡SOURCE-OBJECT-GROUP
(2)檢查線以 「基團的對象」(通知開始這是一個顛倒的保留名稱,所以思科可以區分) ---> YES?將這個「object-group」的值發送到另一個函數,就像這個一樣。這個值可以用awk打印$ 2
---> NO?打印線,因爲它只是一個「正常」的一個,因爲它不以「組對象」
network-object 10.1.1.0 255.255.255.0
network-object 10.2.1.0 255.255.255.0
--->開始YES?將這個「object-group」的值發送到另一個函數,就像這個一樣。這個值可以通過awk print $ 2獲得(轉到1?)
(3)繼續向下配置,直到我們點擊一些以「object-group network」開頭的文本,但是不包含顯式名稱原始羣體對象,含義 - 這是一個我們不關心的新對象羣體,因爲它不是我們從訪問列表中提取的對象,也不是我們正在擴展的嵌套對象。
泵$目標對象羣名稱進入功能 重複了,在格蘭訪問列表中的所有行
我明白這是複雜的,並且有兩個級別(或更多)嵌套組去這裏。讓我知道你是否需要更多信息。
我無法得到正確顯示的評論,正在嘗試換行的雙重空間。
我想你的建議,與{$ d; p}更換結束sed的P,但我去了相同的輸出:
[[email protected] ~]$ sed -n '/object-group network SOURCE-OBJECT-GROUP/,/object-group network/{$d;p}' ASA_CONFIG.cfg
object-group network SOURCE-OBJECT-GROUP
network-object 10.1.1.0 255.255.255.0
network-object 10.2.1.0 255.255.255.0
group-object NESTED-OBJECT-GROUP
network-object 10.3.1.0 255.255.255.0
object-group network NESTED-OBJECT-GROUP
[[email protected] ~]$ sed -n '/object-group network SOURCE-OBJECT-GROUP/,/object-group network/p' ASA_CONFIG.cfg
object-group network SOURCE-OBJECT-GROUP
network-object 10.1.1.0 255.255.255.0
network-object 10.2.1.0 255.255.255.0
group-object NESTED-OBJECT-GROUP
network-object 10.3.1.0 255.255.255.0
object-group network NESTED-OBJECT-GROUP
我們需要確保省略了最後一行。 進出口檢驗與下面的文字:
[email protected] ~]$ cat ASA_CONFIG.cfg
object-group network DESTINATION-OBJECT-GROUP
network-object 10.33.1.0 255.255.255.0
network-object 10.44.1.0 255.255.255.0
object-group network ANY-OTHER-OBJECT-GROUP
network-object 10.1.1.0 255.255.255.0
object-group network SOURCE-OBJECT-GROUP
network-object 10.1.1.0 255.255.255.0
network-object 10.2.1.0 255.255.255.0
group-object NESTED-OBJECT-GROUP
network-object 10.3.1.0 255.255.255.0
object-group network NESTED-OBJECT-GROUP
network-object 10.11.1.0 255.255.255.0
network-object 10.22.1.0 255.255.255.0
我幾乎能明白你正試圖解釋。 – Jdamian 2014-11-05 18:47:19
awk代碼中第二個模式結尾的「p」是什麼意思? – Jdamian 2014-11-05 18:48:00
@Jdamian這意味着作者不知道awk語言。 – 2014-11-05 19:50:37