সেড - একাধিক ফাইলে পরিবর্তনগুলি প্রয়োগ করুন


11

আমার কাছে শত শত ফাইল রয়েছে যা " </foo:bar>" রয়েছে

cc
bb
aa
</foo:bar>
dd
xx
vv

আমি একবারে তাদের সব পরিবর্তন করতে চাই

cc
bb
aa
</foo:bar>

আমি সঠিক ফাইলের নাম দিলে সেড ভাল কাজ করে

sed -i "/ </ foo: bar> / q" 99999.txt

কিন্তু যখন আমি একবারে তাদের সমস্ত পরিবর্তন করার চেষ্টা করি তখন কোনও ফল পাই না।

 sed -i "/<\/foo:bar>/q" *.txt

উত্তর:


19

চেষ্টা করুন:

sed -s -n -i '0,/<\/foo:bar>/p' *.txt

-s প্রতিটি ফাইলকে পৃথক হিসাবে বিবেচনা করার জন্য সেডকে বলে।

যেহেতু sedসমস্ত ফাইল শেষ না হওয়া পর্যন্ত আমরা প্রস্থানটি ছাড়তে চাই না , আমরা শুরু থেকে কেবল মুদ্রণ করতে শুরু করি <\/foo:bar>এবং বাকী রেখাগুলি মুদ্রণ করি না। -nআমরা স্পষ্টভাবে এটি না জিজ্ঞাসা না করে সেড প্রিন্ট না করার কথা বলে। কমান্ডটি 0,/<\/foo:bar>/pশেডকে ফাইলের শুরু থেকে প্রথম পংক্তির সাথে মেলে এমন প্রথম প্রান্তের যে কোনও লাইন প্রিন্ট করতে বলে <\/foo:bar>

-s/ ওএসএক্স sed বিকল্প বাসদ জন্য উপলব্ধ নয়।


@ fd0 ধন্যবাদ উত্তরটি -sBSD / OSX সেডের অভাব নোট করার জন্য আপডেট হয়েছে ।
1024

জন্য গনুহ sed , -iবিকল্প বোঝা -s... সেখানে একটি হল sedবাস্তবায়ন যেখানে এই সমাধান ছাড়া কাজ করবে না -sবিকল্প?
সুন্দীপ

7

ফাইলগুলি </foo:bar>পাওয়া গেলে পড়া বন্ধ করতে :

জিএনইউ সহ awk:

gawk -i inplace '{print}; $0 == "</foo:bar>" {nextfile}' ./*.txt

সহ perl:

perl -ni -e 'print; close ARGV if $_ eq "</foo:bar>\n"' ./*.txt
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.