كيف يمكنني استخدام الحوار الاقتصادي الاستراتيجي لانتزاع فقط اسم خادم الأسماء من الناتج حفر؟
سؤال
وأعمل في الشركة التي تقدم الاستضافة و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