سؤال استخدام awk أو ما شابه ذلك للعثور على الكلمة التالية في إخراج أمر آخر


أحاول تحديد Startsector لملف .img من داخل برنامج نصي bash حتى يمكن تثبيته بشكل صحيح من داخل البرنامج النصي. لقد تم استخدام الأمر ملف للعثور بسهولة على Startsector - كيف أنا لست متأكدا من كيفية استخراج هذا الرقم من الإخراج. أعتقد أن الإجابة تكمن في استخدام awk لكنني لا أستطيع أن أفهم كيف أفعل ذلك.

فيما يلي إخراج الأمر file كمرجع:

kemra102@kaon:~/Downloads$ file 2012-07-15-wheezy-raspbian.img
2012-07-15-wheezy-raspbian.img: x86 boot sector; partition 1: ID=0xc, starthead 130, startsector 8192, 114688 sectors; partition 2: ID=0x83, starthead 165, startsector 122880, 3665920 sectors, code offset 0xb8
kemra102@kaon:~/Downloads$ 

4
2017-08-08 20:23


الأصل




الأجوبة:


انها أسهل قليلا مع sed أو perl من awk. مع sed: تطابق الخط بالكامل ، وتبحث عنه partition 1 تليها startsector 1234 (أو أي تسلسل آخر للأرقام) بدون ; ما بين أثنين. استبدل ذلك السطر بالكامل فقط بالرقم ، وقم بطباعة النتيجة. يمكنك التغيير partition 1 إلى partition 2، بالتاكيد.

sed -n 's/^.*partition 1:[^;]* startsector \([0-9][0-9]*\).*$/\1/p'

مع بيرل: ابحث عن سلسلة فرعية تتكون من partition 1 تليها startsector 1234 مع عدم وجود ; ما بين أثنين؛ احفظ الارقام بعد startsector في مجموعة. إذا كان هناك تطابق ، فقم بطباعة الأرقام.

perl -l -ne '/partition 1:[^;]* startsector ([0-9]+)/ and print $1'

2
2017-08-08 20:49



ممتاز شكرا! - kemra102


file 2012-07-15-wheezy-raspdian.img     | \
    grep -oP '(?<=startsector )[0-9]+'  | \
    sed -n '1p'

إذا قمت بتغيير 1 إلى أي رقم آخر في sed -n '1p' سوف يعطيك الحوادث الأخرى.


2
2017-08-08 20:29



file 2012-07-15-wheezy-raspbian.img | grep -oP '(?<=startsector )[0-9]+' (piping الإخراج من الأمر الأصلي إلى grep) من شأنه أن يحقق الشيء نفسه. - reverendj1
نقطة جيدة. لقد أساءت فهمه واعتقدت أنه كان يستخدم برنامجًا آخر للحصول على الناتج الذي نشره. - con-f-use
شكرا لكما - بالتأكيد يفعل ما سألت. شيء واحد آخر على الرغم من ذلك ، كيف يمكنني الحصول عليه لإظهار الأول فقط من النتائج؟ لقد جربت الخيار -m ولكني أعطتني دائمًا 2 من النتائج حتى لو حددت 1. إن تفكيري الحالي حيث لا يبدو أن هذا الخيار يعمل على توجيهه عبر الرأس بعد ذلك. - kemra102
انظر تحرير إجابتي. - con-f-use