2013-04-16 2 views
0

Я пытаюсь извлечь записи DNS PTR из зоны Microsoft, чтобы я мог их импортировать в зону BIND. У меня есть все превратности, и они находятся в следующем формате:sed - Обратный DNS-извлечение

1.0.0.10.in-addr.arpa. 1200 IN PTR my.long.domain.net. 
22.0.0.10.in-addr.arpa. 1200 IN PTR your.long.domain.net. 
33.0.0.10.in-addr.arpa. 1200 IN PTR our.long.domain.net. 

То, что я пытаюсь сделать, это извлечь начальный октет (в данном случае, 1, 22, и 33 из каждой линии - в начало), но затем я хочу удалить все остальное, вплоть до элемента «PTR». Затем я хочу сохранить элемент «PTR», а также фактический обратный (например, my.long.domain.net). Поэтому я предполагал использовать sed и вывод, который я хочу получить (используя пример сверху), будет:

1  PTR  my.long.domain.net. 
22  PTR  your.long.domain.net. 
33  PTR  our.long.domain.net. 

это то, что СЭД может сделать и как бы я идти об этом, что я, безусловно, любой SED эксперт

Благодаря передовой

ответ

2

Это может работать для вас (GNU СЭД):

sed -r 's/\..*(\sPTR)/\1/' file 
+0

+1 аккуратный и быстрый! – Kent

+0

Работает отлично - и действительно легко читать – drewrockshard

0

.! Я думаю, что это делает то, что вы хотите:

sed 's/\s\{1,\}/ /g;s/\([^.]*\).*PTR /\1  PTR  /;s/^\(........\) */\1/' 

Некоторые это просто, чтобы получить расстояние вы показываете в желаемом выходе, если все, что вы хотели, были единичные разнесенных поля это будет делать:

sed 's/\s\{1,\}/ /g;s/\([^.]*\).*PTR /\1 PTR /' 
+0

William - Думаю, что я нашел проблему с моим примером, которая поможет, так как ваше решение не сработало (что я считаю моим плохой). Экс. Я показал, что у вас есть пробелы, тогда как мой исходный файл, в котором есть зоны в нем, где есть место, на самом деле выглядит как вкладки. Есть ли способ пересмотреть свое решение, возможно, искать вкладки, а не пробелы? – drewrockshard

+0

Отредактировано вместо любого пробела с пробелами. Если ваша версия sed не нравится '\ s' для символа пробела, попробуйте \ t для вкладок или класса POSIX [[: space:]], иначе вам может понадобиться вставить символ символа в класс' [^i] 'где^i - control-i (попробуйте ввести control-v, control-i, чтобы вставить его, что часто работает). – William

Смежные вопросы