2017-09-25 28 views
0

我有一個DNS區域文件看起來像以下:提取線

record A 1.1.1.1 
     A 1.1.1.2 
     A 1.1.1.3 
other_record A 1.1.1.4 
      A 1.1.1.5 
another_rec A 1.1.1.6 

我需要提取,沒有任何屬於記錄所有線路(所以第一個和兩個下方) (實際的文件有更多這樣的記錄,所以對第一行和第二行以下的內容不是有效的解決方案)。

預期結果:

record A 1.1.1.1 
     A 1.1.1.2 
     A 1.1.1.3 
+1

至少,後期預期的結果 – RomanPerekhrest

+0

@RomanPerekhrest完成。謝謝。 – IComeFromVilna

回答

0
awk '/^[^[:space:]]/{f = ($1=="record" ? 1 : 0)} f' file 
+0

這一個工程。你能解釋一下解決方案嗎?另外我怎樣才能達到相反的目的,並刪除「記錄」?謝謝! – IComeFromVilna

+0

對於每個不以空格開頭的輸入行,如果行以「記錄」開頭,則將「發現」變量「f」設置爲1,否則爲0。對於每一行,如果f'不爲零,則打印該行。交換1和0來獲得相反的結果。 –

0

這可能會爲你工作(GNU SED):

sed '/^record/{:a;n;/^\S/Q;ba};d' file 

此終止的record, 第一次出現或以下:

sed '/^\S/h;G;/^record/MP;d' file 

這會打印出所有出現的record

+0

它的工作原理,你能解釋一下嗎?你也可以解釋如何刪除「記錄」?謝謝! – IComeFromVilna

0

你也可以考慮使用DNS區域的各種語言如Python等可用文件分析器

一旦你對區域文件內容的句柄作爲對象,然後它很容易操縱它你想要的方式。

我做了這個快速網頁搜索後 - https://github.com/blockstack/zone-file-py。 (還有其他一些......你需要看看哪一個最適合你)

0

你能否請嘗試下面,讓我知道這是否有幫助。

awk '/^[a-z]+/ && !/^record/{flag=""} /^record/{flag=1} flag' Input_file 
-1
awk '!/_/&&NR!=5' file 

record A 1.1.1.1 
     A 1.1.1.2 
     A 1.1.1.3