كيف يمكنني استخدام الحوار الاقتصادي الاستراتيجي لانتزاع فقط اسم خادم الأسماء من الناتج حفر؟

StackOverflow https://stackoverflow.com/questions/1620128

  •  06-07-2019
  •  | 
  •  

سؤال

وأعمل في الشركة التي تقدم الاستضافة وDNS الخدمات. نحن نحاول أن يهاجر كل شيء أكثر من خوادم جديدة وقمنا في كثير من الأحيان تصل إلى zonefiles قديمة على خدمتنا والعملاء قد تغيرت أجهزتهم موثوقة لشخص آخر.

وأنا أحاول أن أكتب نصي من شأنها أن تحقق الهواز، NS، والمعلومات الخدمية لتحديد ما إذا كان لا يزال يستخدم نطاق لنا وملقم مخول.

وأنا محاولة لاستخدام sed لتصفية إخراج التالية لعرض فقط خادم الأسماء دون زائدة ".":

dig +noall +answer soa yahoo.com | sed 's/.*SOA\s*//' | sed 's/\.$//'

ولقد بحثت في الشبكة، ولكن الأمثلة القيادة الأكثر سد يعمل على "الخطوط" بدلا من "الكلمات".

والناتج المطلوب سيكون على النحو التالي:

$ dig +noall +answer soa yahoo.com | sed '<Some SED code here>'
ns1.yahoo.com

وأي اقتراحات سيكون مفيدا.

هل كانت مفيدة؟

المحلول

وبدلا من استخدام إزالة الجزء الذي كنت لا تريد، وأود أن أقترح باستخدام التعبير الجزئي بين قوسين لتحديد الشيء الذي كنت لا تريد، كما يلي:

وdig +noall +answer soa yahoo.com | sed 's/.*SOA\s*//' | sed 's/^\([^ ]*\). .*/\1/g'

وهذا بالبحث عن سلسلة بدأت مع بعض الشخصيات غير الفضائية، تليها نقطة، والفضاء، ومن ثم بقية السطر. فإنه يستبدل هذا النمط مع مجرد قليلا قبل النقطة (وهو التعبير الجزئي رقم 1).

نصائح أخرى

وعند التعامل مع البيانات المهيكلة، وأسهل لاستخدام AWK

$ dig +noall +answer soa yahoo.com | awk '{sub(/.$/,"",$5);print $5}'
ns1.yahoo.com

لحساب عدد الكلمات في السطر:

awk '{ print NF }'

وعلى سبيل المثال:

printf 'foo bar\nbar\nfoo bar zim' | awk '{ print NF }'

وأختام:

2
1
3
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top