بسم الله و الحمد لله و الصلاة و السلام على رسول الله و آله و أصحابه و من إتبع هداه.
هذه طرق مختلفة لإستخراج جزء معين من بيانات. قد تكون ملف نصي أو بصيغة xml أو html أو ملفات logs.
الطريقة و القاعدة الأساس لا تختلف.
أغلب هذه الطرق .إستخدمت أدوات grep و sed و cut و بعض الحالات awk.
طريقة إستخراج جزء روابط تحميل مباشرة للصوتيات
هذا مثال للجزء الذي سنعمل عليه.
ound-data="https://dl12.sura.pw/dl/reciter/22/24/001.mp3?h=mo4VedOLdpE2GIFaVn_UAg&expires=1658874093"
كيف حصلت على هذه المعلومات. إستخدمت أداة lynx للحصول على مصدر صفحة تحميل الصوتيات. و توجيه الخرج إلى ملف.
lynx -source https://suratmp3.com/quran/reciters/22 > filesrc-suratmp3.txt
بعد ذلك نطلع على محتوى الملف . و نبحث عن الجزء
المتعلق بملفات mp3. ثم نستخدم grep لطباعة ذلك الجزء.
ound-data="https://dl12.sura.pw/dl/reciter/22/24/001.mp3?h=mo4VedOLdpE2GIFaVn_UAg&expires=1658874093"
- كما تلاحظون صيغة الملف mp3 موجودة في المقطع. هذا يعني أنه الرابط الخاص بتحميل الملف.
- إلى الآن الموضوع لم يبدأ بعد

- الآن نريد إستخلاص رابط التحميل فقط. أول خطوة هي الإنتباه إلى حروف تحديد الحقول. في هذه الحالة يوجد لذينا . حروف -:_/.=
- الفكرة هو إختيار محدد واحد يوصلنا إلى النتيجة التي نريد.
في هذه الحالة رمز = يساوي جيد.
الآن نبدأ تطبيق هذه مبادئ
grep 'dl12' filesrc-suratmp3.txt | cut -d= -f2
"https://dl12.sura.pw/dl/reciter/22/24/112.mp3?h
كما تلاحظون أخذنا الحقل الثاني.النتيجة تبدو جيدة. و لكن تحتاج المزيد من التنظيف .
سنستخدم sed لحذف حرف h في آخر السطر.
grep 'dl12' filesrc-suratmp3.txt | cut -d= -f2 | sed -e 's/h$//g'
رمز $ يعني آخر السطر. يعني حرف h الموجود بآخر السطر.
حرف g في هذه الحالة لا نحتاجه. وضعته إحتياطا. عمله القيام بعملية الإستبدال على جميع النتائج التي تجدها أداة sed.
- السطر الآن سيبدوا بهذا الشكل :
grep 'dl12' filesrc-suratmp3.txt | cut -d= -f2 | sed -e 's/h$//g'
"https://dl12.sura.pw/dl/reciter/22/24/113.mp3?
جميل. نحتاج فقط التخلص من علامتي و ؟“”
نضيف عملية آخرى لأداة sed
grep 'dl12' filesrc-suratmp3.txt | cut -d= -f2 | sed -e 's/h$//g' -e 's/["?]//g'
النتيجة المحصل عليها.
grep 'dl12' filesrc-suratmp3.txt | cut -d= -f2 | sed -e 's/h$//g' -e 's/["?]//g' | head -n4 https://dl12.sura.pw/dl/reciter/22/24/001.mp3 https://dl12.sura.pw/dl/reciter/22/24/002.mp3 https://dl12.sura.pw/dl/reciter/22/24/003.mp3 https://dl12.sura.pw/dl/reciter/22/24/004.mp3
جميل. هذا ما نريده. الآن نضع الروابط داخل ملف لتحميلها لاحقا.
grep 'dl12' filesrc-suratmp3.txt | cut -d= -f2 | sed -e 's/h$//g' -e 's/["?]//g' > suratmp3-mothafer-links.txt
طريقة فرز المعلومات و إستخلاصها. لا توجد لها قاعدة عامة. المستخدم ينسجم مع كل حالة. و يستخدم محددات الحقول التي ستوصله إلى ما يريد في أقل الخطوات.
و هذا أيضا ينطبق على الأدوات. في بعض الحالة يفضل إستخدام أداة عن أخرى.
سأضيف مثال آخر. سبق لي وضعته بمجموعة تليجرام الخاصة بمجتمع أسس
نسخ و لصق ![]()
مثال لتحميل صوتيات من موقع mp3quran
نقوم بتحميل مصدر الصفحة. و توجيه المخرجات لملف.
lynx -source https://mp3quran.net/ar/souilass > filesrc
بعد ذلك . عزل فقط روابط تحميل الملفات و توجيهها لملف. أعتقد السطر واضح. من لم يفهم. يسأل.
grep -n "server16" filesrc | cut -d= -f4 | sort | uniq | sed 's/["\>]//g' > souilas-mp3-list.txt
شكل الروابط.
File: souilas-mp3-list.txt
https://server16.mp3quran.net/download/so
uilass/Rewayat-Warsh-A-n-Nafi/001.mp3
https://server16.mp3quran.net/download/so
uilass/Rewayat-Warsh-A-n-Nafi/018.mp3
https://server16.mp3quran.net/download/so
uilass/Rewayat-Warsh-A-n-Nafi/019.mp3
https://server16.mp3quran.net/download/so
uilass/Rewayat-Warsh-A-n-Nafi/025.mp3
https://server16.mp3quran.net/download/so
uilass/Rewayat-Warsh-A-n-Nafi/050.mp3
الآن يكفي فقط . إستخدام أداة لتحميل الملفات.
wget -c -i souilas-mp3-list.txt
جميل. نضيف الآن . أمثلة أخرى.
<Key>Shared_Value</Key>
نريد فقط قيمة المفتاح . نستخدم awk
awk -F '[<>]' '{ print $3}' <<< $data
Shared_Value
عملية بسيطة. تحديد محددين <> و طباعة الحقل الثالث. يعني قيمة المفتاح.
طريقة أخرى بإستخدام sed.
echo $data | sed 's/[><]/ /g' | cut -d ' ' -f3
Shared_Value
قمنا بإستبدال رمزي >< بمساحة. ثم إستخدمنا هذه المساحة كمحدد حقل. بعد ذلك قمنا بطباعة الحقل الثالث.
مثال آخر :
<?xml version="1.0" encoding="UTF-8"?>
<blah>
<blah1 path="er" name="andy" remote="
origin" branch="master" tag="true" />
<blah1 path="er/er1" name="Roger" rem
ote="origin" branch="childbranch" tag="tr
ue" />
<blah1 path="er/er2" name="Steven" re
mote="origin" branch="master" tag="true"
/>
</blah>
نريد طباعة فقط كلمة master .الموجودة بالسطر الذي توجد به كلمة andy
الحيلة الأولى إستخدام كلمة andy لتوجيه إهتمامنا حول ذلك السطر فقط.
grep 'andy' andy.xml <blah1 path="er" name="andy" remote="origin" branch="master" tag="true" />
أيضا كما يبدو يوجد الكثير من محددات =
جميل . نستغلهم.
grep 'andy' andy.xml | cut -d= -f5
"master" tag
جميل . نقترب منا نريده
نضيف عملية لأداة sed التنظيف
grep 'andy' andy.xml | cut -d= -f5 | sed -e 's/tag//g' -e 's/\"//g'
master
جيد. هذا ما نريده.
قامت sed بإستبدال كلمة tag بلاشيء . يعني حذفتها. و الشطر الثاني من العملية حذف رمزي “” حول كلمة master.
- مثال آخر :
<modelVersion>4.0.0</modelVersion> <groupId>com.mycompany</groupId>
<artifactId>project-parent</artifactI
d>
<name>project-parent</name>
<version>1.0.74-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.sybase.jconnect</gro
upId>
<artifactId>jconnect</artifactId>
<version>6.05-26023</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId
>
نريد الحصول هذا الجزء
1.0.74-SNAPSHOT
$ cat pom.xml | awk -F'[<>]' '/SNAPSHOT/{print $3}'
1.0.74-SNAPSHOT
نفس الطريقة . إستخدام محددات الحقول <> ثم طباعة الحقل الذي نريد.
- طريقة أخرى بإستخدام sed
grep "SNAPSHOT" pom.xml | sed -e 's/<version>//' -e 's/<\/version>//' -e 's/^[[:blank:]]*//'
1.0.74-SNAPSHOT
حذف مفاتيح النسخة عن طريقة عملتين. و عملية أخيرة لحذف الفراغ في بداية السطر.
هذه كلها طرق للمبتدئين. شخص محترف سيقوم بأفضل من هذه الطرق.
- مثال آخر :
echo $DATA
<element name="Barium"/>
نريد الحصول على كلمة Barium فقط
echo $DATA | cut -d= -f2
"Barium"/>
echo $DATA | cut -d= -f2 | sed -e 's/[\"\/\>]//g'
Barium
جميل.
- مثال أخير :
grep '' data.xml
<item>
<title>15:54:57 - George:</title>
<description>Diane DeConn? You saw Diane DeConn!</description>
</item>
<item>
<title>15:55:17 - Jerry:</title>
<description>Something huh?</description>
</item>
نريد العنوان الخاص بجورج فقط.
grep 'George' data.xml
<title>15:54:57 - George:</title>
grep 'George' data.xml | cut -d\> -f2 | cut -d\< -f1
15:54:57 - George:
قمنا بإستخدام محددات حقول >< و لكن يجب تجاوزها برمز .
لكي لا تواجهوا مشكلة.
إلى هنا ينتهي الموضوع
الهدف منه . إعطاء فكرة عن طريقة التعامل مع مثل هذه الحالات . لا توجد قاعدة واحدة عامة .
كل حالة و طريقة التعامل معها.