লাইন শেষ সংরক্ষণ করুন


111

আমি উইন্ডোতে কিছু প্রতিস্থাপনের জন্য চালাচ্ছি এবং আমি লক্ষ্য করেছি যে এটি স্বয়ংক্রিয়ভাবে লাইন এন্ডিংগুলিকে ইউনিক্সে রূপান্তর করে () n)। উইন্ডোজ লাইন এন্ডিংস (\ r \ n) বা ফাইল থেকে লাইন শেষগুলি সংরক্ষণের জন্য আরও ভাল ব্যবহার করার জন্য সেডকে বলার বিকল্প নেই?

দ্রষ্টব্য: আমি আনসিউটিস থেকে সেড ব্যবহার করি: http://unxutils.sourceforge.net/


2
নীচের সমাধানগুলি ম্যাকোজে কাজ করে না।
উইলিয়াম এন্টারিকেন

আমি এমনকি এ পর্যন্ত পেয়েছি এবং এটি এখনও কার্যকর হয়নিLC_ALL=C perl -i -e 'binmode $STDIN;undef $/;$_=<>;s|http://911coned.com|https://911coned.com|gm;print' education.html
উইলিয়াম এন্টারিকেন 21

সুতরাং আসলে উপরের কমান্ডটি কাজ করে এবং আমি ঠিক git diffপ্রোগ্রামটিতে একটি বাগ আবিষ্কার করেছি ।
উইলিয়াম এন্টারিকেন 21 '13

1
আপনি সেড ব্যবহার করতে পারেন (কোনও বিশেষ বিকল্প ছাড়াই) + unix2dos
mems

উত্তর:


143

-bফাইলটিকে বাইনারি হিসাবে বিবেচনা করার জন্য আপনি সেডের বিকল্পটি ব্যবহার করতে পারেন । এটি উইন্ডোজে সাইগউইনের সেডের সাথে সমস্যার সমাধান করবে।

উদাহরণ: sed -b 's/foo/bar/'

আপনি যদি লাইনটির শেষের সাথে মিল রাখতে চান তবে matchচ্ছিক ক্যারেজ রিটার্নটি মেলাতে, ক্যাপচার করতে এবং অনুলিপি করতে ভুলবেন না।

উদাহরণ: sed -b 's/foo\(\r\?\)$/bar\1/'

থেকে sed man পৃষ্ঠা :

-বি - বাইনারি

এই বিকল্পটি প্রতিটি প্ল্যাটফর্মে উপলব্ধ, তবে কেবলমাত্র কার্যকর যেখানে অপারেটিং সিস্টেমটি পাঠ্য ফাইল এবং বাইনারি ফাইলগুলির মধ্যে পার্থক্য তৈরি করে। যখন এই ধরনের পার্থক্য তৈরি করা হয় - যেমনটি এমএস-ডস-এর ক্ষেত্রে হয়, উইন্ডোজ, সাইগউইন — পাঠ্য ফাইলগুলি ক্যারেজ রিটার্ন এবং একটি লাইন ফিড অক্ষর দ্বারা পৃথক করা লাইনের সমন্বয়ে গঠিত হয় এবং সেডটি শেষ সিআর দেখতে পায় না। যখন এই বিকল্পটি সুনির্দিষ্ট করা হয়, সেড বাইনারি মোডে ইনপুট ফাইলগুলি খুলবে, সুতরাং এই বিশেষ প্রক্রিয়াকরণের অনুরোধ না করে এবং লাইনগুলি একটি লাইন ফিডে শেষ হওয়ার জন্য বিবেচনা করে না `


5
নোট করুন যে sed -iএটি সাইগউইনের সাথে (আমার জন্য) কাজ করে না , তবে আপনি এটি ঘিরে কাজ করতে পারেন। আপডেটের জন্য ধন্যবাদ - অন্যান্য উত্তরগুলি কিছু সময়ের জন্য এই বিষয়টির শেষ শব্দ ছিল word
হার্পো

দ্রষ্টব্য, এই বিকল্পটি ম্যাকের সাথে সেডের সাথে উপলভ্য নয়।
সেন্তিল কুমারান

21
এমনকি আমার জন্য কাজ করে sed -i এটির : এটি কীভাবে টাইপ করা যায় তা কেবল গুরুত্বপূর্ণ। যদিও sed -biএবং sed -i -bকাজ, sed -ibকরে না কাজ কেন (ব্যবহার জন্য man পৃষ্ঠা দেখুন bব্যাকআপ অনুলিপি সাফিক্স হিসাবে)।
ওলাফ ম্যান্ডেল

2
ব্যবহার করুন: sed -bi 's/foo/bar/'
কুনাল বি।

2
উইন্ডোজ সাইগউইনে আমার পক্ষে কাজ করে না। যে লাইনে পরিবর্তন এসেছে সেগুলিতে লাইনটির শেষটি ইউনিক্সি। বাকী লাইনের উইন্ডোইশ লাইন-এন্ডিং রয়েছে। এইভাবে আমার ফাইলটি বিভিন্ন লাইনের শেষের সাথে মিশ্রিত রেখাগুলি পেয়েছে।
ট্রুথহোল্ডার

10

আপনি আপনার বিদ্যমান স্ক্রিপ্টের শেষে এর \nজন্য সাব সাবট করার চেষ্টা করতে \r\nপারেন:

sed 's/foo/bar/;s/$/\r/'

অথবা সম্ভবত

 sed -e 's/foo/bar/' -e 's/$/\r/'

যদি উপরোক্ত দু'জনের মধ্যে কেউই কাজ না করে তবে আপনার সংস্করণটির জন্য এই sedজাতীয় বিকল্পের উপস্থিতি আছে কিনা তা দেখার জন্য আপনাকে নির্দিষ্ট ম্যান পৃষ্ঠার সাথে পরামর্শ করতে হবে । নোটের * স্নো সংস্করণ sedনা না ছাড়া লাইন terminators পরিবর্তন তা করার বলা হচ্ছে।

অন্য বিকল্প হ'ল এটি ব্যবহার করা cygwin সংস্করণটিsed যা এর অনাকাঙ্ক্ষিত আচরণ না করা উচিত


15
সাইগউইন সংস্করণটির এই অনাকাঙ্ক্ষিত আচরণ রয়েছে।
হার্পো

2
যদি ফাইলটিতে \ n ( 0x0A) এবং \ r \ n ( 0x0D 0x0A) উভয় থাকে - এই প্রস্তাবিত সমাধানটি (সর্বদা পুনরায় ইনজেকশনের \ r এর) এটি ভেঙে দেয়।
ভ্লাদ

এটি আমার জন্য MSYS2 / MinGW ব্যবহার করে। আপনাকে ধন্যবাদ সিজএক্স।
এন্টামডেলজ

6

বিকল্পভাবে, (সাইগউইন সংস্করণটির) perl -peএই সমস্যাটি মনে হচ্ছে না।


ম্যাকোস-এ সেড--বি বিকল্প নেই এবং মূল প্রশ্নে বর্ণিত একই সমস্যা রয়েছে। পার্ল বিকল্পটিতে এই সমস্যা নেই, সুতরাং আপনার পরামর্শের জন্য ধন্যবাদ। sed -i -e 's/<img[^>]*\/>//g' *.xml'by n' দ্বারা লাইনের শেষগুলি প্রতিস্থাপন perl -i -p -e 's/<img[^>]*\/>//g' *.xmlকরে মূল লাইন শেষগুলি সংরক্ষণ করে
গুরুনিভার্স

2

নিউ-লাইনগুলি (উইন-> ইউনিক্স) জগাখিচু করতে গনউউইনকে দমন করা যেতে পারে যদি আপনি কেবল-বি স্যুইচটি নির্দিষ্ট করেন এবং পুনঃনির্দেশ করেন। -I (ইনলাইন) স্যুইচটি ব্যবহার করা এটিকে বিশৃঙ্খলা করবে।

যেমন sed.exe -b "s / \ xFF \ xFE //" c: c temp \ in.csv> c: \ temp \ out.csv


1
আমার উত্তরে ওয়ার্কিং -iমোড সহ একটি সংস্করণ দেখুন ।
ভাদজিম

2

আমি খুঁজে পেয়েছি https://github.com/mbuilov/sed-windowssed-4.4.exe থেকে এটি খাঁটি জয় is

  • ডিফল্ট মোডে উইন্ডোজ সিআরএলএফ লাইন শেষ ব্যবহার করে
  • -bমোডে মূল লাইন শেষ সংরক্ষণ করে
  • ইন-প্লেস -iমোডের সাথে সঠিকভাবে কাজ করে
  • এছাড়াও উপলব্ধ করা হয় -zসঙ্গে মোড \0delimeters পরিবর্তে \nযা কুশলী কখনও কখনও হতে পারে খুব

আরও দেখুন sed অপশনের তালিকা এবং সকল উইন্ডো sed পোর্ট তালিকা

লক্ষ্য করুন gnuwin32 sed 4.2.1 করে দুর্নীতিগ্রস্ত লাইন শেষা w শ মধ্যে -biমোড এবং নেই -zএ সব মোড।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.