2 টি ট্যাগের মধ্যে পাঠ্য আহরণ করতে সেড ব্যবহার করা


16

আমার একটি .xML ফাইল রয়েছে এবং আমি .HML 6 মেশিনে একটি "গ্রুপিনস্টল" করার চেষ্টা করছি কারণ সেই .xML ফাইলে বেশ কয়েকটি শতাধিক গ্রন্থাগার রয়েছে ... (16,000 লাইনের কাছাকাছি)।

তাই আমি এই কাঠামোযুক্ত .xML ফাইলের মধ্যে থাকা গ্রুপের নামগুলি বের করার চেষ্টা করছি:

<b>
<group>
<id> group name </id>
   <packages>
   ...
   </packages>
<id> group name 2 </id>
   <packages>
   ...
   </packages>
<id> etc... </id>
</group>
</b>

মূলত, আমি এটাই চেষ্টা করেছি:

sed -n '/<id>/,/<\/id>/p' test1.txt > test2.txt

আমি .xML ফাইলটি test1.txt এ অনুলিপি করেছিলাম। আমি গ্রুপের নামগুলি টেস্ট 1.টিএসটিএসটি থেকে টেস্ট 2.txt নামে একটি দ্বিতীয় ফাইলের সাথে বের করার চেষ্টা করছি। যাইহোক, উপরের লাইনটি সহ, এটি আমার ফাইলের প্রথম <id>ট্যাগ থেকে শেষ </id>ট্যাগ পর্যন্ত সমস্ত কিছু বের করছে । আমি আমার কোডটি কয়েকবার এটি নিষ্কাশন করতে কীভাবে পরিবর্তন করতে পারি?

আমার দ্বিতীয় প্রশ্নটি হ'ল: -ডাউনলোডলি প্লাগইন কি ইয়ামের গ্রুপগুলির সাথে কাজ করে?


3
ওহে প্রিয়, এক্সএএমএমএলটিকে আবার রিজেক্সপ্সের সাথে পার্সিং করছে। এটি সমস্যার জন্য জিজ্ঞাসা করছে ...
gniourf_gniourf

1
কটাক্ষপাত আছে এই
alecail

8
তিনি এক্সএমএলকে বিশ্লেষণ করতে বলছেন না , বাইটের একটি নির্দিষ্ট ম্যাচটি বের করতে বলছেন । একটি মৌলিক পার্থক্য আছে।
রুনিয়াম

উত্তর:


31

আপনার যা প্রয়োজন তা মনে হচ্ছে লাইনের পাশাপাশি আরও কিছু

sed -n 's:.*<id>\(.*\)</id>.*:\1:p'

(আপনার নমুনা মত অভিমানী যে <id>এবং </id>একই লাইনে এবং শুধুমাত্র এক যে <id>...</id>প্রতি লাইনে)।

অথবা একটি এক্সএমএল-সচেতন সরঞ্জাম ব্যবহার করুন:

xmlstarlet sel -t -v '//id' -n

এটা খুব ঝরঝরে, চিয়ার্স!
fduff


1
$ echo '<id>I am a sample group</id>' | sed 's/<\/\?[^>]\+>//g'
I am a sample group
$

এটি যে কোনও ট্যাগের সাথে অবশ্যই কাজ করবে <a href="...">...</a>অ্যাঙ্করগুলির সাথে। কোনও জিএনইউজম ব্যবহার করা হয়নি - বেসিক রেজেক্স সহায়তা sedযথেষ্ট।
তবে : দয়া করে নোট করুন যে ওপেনিং এবং ক্লোজিং ট্যাগ উভয়ই একই লাইনে থাকতে হবে, অন্যথায় বিবৃতিটি আবারও লিখতে হবে।


1

এটি এক্সএমএল, আপনার একটি এক্সএমএল পার্সার ব্যবহার করা উচিত। এক্সএমএল স্টারলেট ব্যবহার করে একটি সমাধান এখানে দেওয়া হয়েছে :

$ xml sel -t -v '//group/id' -nl data.xml
 group name
 group name 2

এক্সপথ এক্সপ্রেশন //group/idকোনও idনোডের নীচে যে কোনও নোড নির্বাচন করবে group। এর -t -vঅর্থ "মানগুলি তোলার জন্য নিম্নলিখিত টেম্পলেটটি ব্যবহার করুন"। -nlশেষে নিশ্চিত করুন যে আউটপুট একটি newline দিয়ে শেষ হয় করতে হবে।

উপরের উদাহরণটিতে একটি এক্সএমএল ফাইল ব্যবহার করা হয়েছে যা আপনার অনুরূপ তবে কোনও লাইন ...মুছে ফেলা সহ।


0

আমি রেকর্ড আহরণের বিষয়টি সমাধান করার জন্য এই পোস্টটি পড়েছি। RHEL 7.3 ডিভিডি থেকে প্রাপ্ত প্যাকেজগুলি repos.xml, যা আমার মনে হয় উপরের লেখক ঠিক তাই করার চেষ্টা করছেন do সুতরাং আমি আশা করি এই স্ক্রিপ্টটি অন্য কাউকে সাহায্য করতে পারে… আমি এখন অনেকবার এটি ব্যবহার করেছি।

সুতরাং আমার আমার "ন্যূনতম ইনস্টল" আরএইচইএল 7 সার্ভারে "জিনোম ডেস্কটপ" গোষ্ঠীটি ইনস্টল করা দরকার যার কোনও এক্স / জিইআই কনফিগার করা নেই।

[root@rac01]# yum group list
Loaded plugins: ulninfo
There is no installed groups file.

হুমম্ম্ম্ম্ম… ডিএমডি-তে ইয়ামের জন্য কোনও গ্রুপের তালিকা নেই (হ্যাঁ, আমি সবগুলি "গুগল" ঠিক করার চেষ্টা করেছি এবং এটি কখনও কাজ করেনি) তাই এক্সএমএল থেকে শক্ত উত্সটিতে এই তালিকাটি নেওয়া হয়েছে।

  1. ডিভিডি মাউন্ট করুন।
  2. আমার প্রয়োজনীয় প্যাকেজ তালিকার সাথে এক্সএমএল ফাইলটি সন্ধান করুন।
  3. প্যাকেজগুলির গ্রুপের তালিকাটি বের করুন।
  4. প্যাকেজ তালিকার মধ্য দিয়ে লুপ করুন এবং ইনস্টল করুন (অন্তর্ভুক্ত নির্ভরতা)।
  5. ধরে নিয়েছি আপনি দৌড়ে গেছেন createrepo /your/local_rpms/dir

    sudo su -
    mkdir /mnt/sr0
    mount /dev/sr0 /mnt/sr0
    cd /mnt/sr0
    
    FILE=$(find . -name "*.xml" | xargs grep '<id>gnome-desktop<\/id>'| cut -d: -f1)
    PKGLIST=$(sed -n '/<id>gnome-desktop<\/id>/,/<\/packagelist>/p' $FILE \
    | sed  -n  '/^ *<packagelist> *$/,/^ *<\/packagelist> *$/{/<packagereq type>/{d};p}' \
    | cut -d'>' -f2 \
    | cut -d'<' -f1)
    
    for p in ${PKGLIST}
       do
        yum deplist ${p}* | awk '/provider:/ {print $2}' | sort -u | xargs yum -y install
    done
    
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.