2014-11-05 54 views
0

道歉 - 現在編輯標題 - 標題最初與我想要的相反。不包括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 
+2

我幾乎能明白你正試圖解釋。 – Jdamian 2014-11-05 18:47:19

+0

awk代碼中第二個模式結尾的「p」是什麼意思? – Jdamian 2014-11-05 18:48:00

+0

@Jdamian這意味着作者不知道awk語言。 – 2014-11-05 19:50:37

回答

1

sed -n '/object-group network OBJECT-GROUP-DADDY/,/object-group network/{$d;p}' ASA_CONFIG.cfg

的$ d將刪除模式的最後一行。

更新:上面的解決方案應該是據我所知還沒有出於某種原因(可能是一個錯誤的sed)工作 - 下面是一個解決方法:

sed -n '/object-group network OBJECT-GROUP-DADDY/,/object-group network/p' ASA_CONFIG.cfg | sed '$d'

+0

@ A.DanischewskiI從兩者中獲得相同結果,並且都包含結束模式:'[nickc @ localhost〜] $ sed -n'/ object-group network SOURCE-OBJECT-GROUP /,/ object-組網絡/ {$ d; p}'ASA_CONFIG.cfg 對象組網絡SOURCE-OBJECT-GROUP 網絡對象10.1.1.0 255.255.255.0 網絡對象10 .2.1.0 255.255.255.0 組對象NESTED-OBJECT-GROUP 網絡對象10.3.1.0 255.255.255.0 對象組網絡NESTED-OBJECT-GROUP' – NickC 2014-11-06 11:46:22

+0

它看起來像一個sed bug,我認爲它應該工作 - 如果你爲你的數據{6d; p}放棄了最後一行。我更新了我的答案以排除最後一行。 – 2014-11-06 11:55:12

+0

你的解決方法有效,我不能讓6d工作。那很好,非常感謝。現在我認爲生病在linux問題上提出了一個不同的線程問題,因爲其餘更多的是關於bash腳本,sed/awk THANKS的錯綜複雜! – NickC 2014-11-06 12:03:08

相關問題