লাইনের শেষে '^ এম' অক্ষর


99

আমি যখন ইউনিক্স এনভায়রনমেন্টে একটি নির্দিষ্ট এসকিউএল স্ক্রিপ্ট রান করি তখন আমি এসকিউএল স্ক্রিপ্টের প্রতিটি লাইনের শেষে একটি '^ এম' অক্ষরটি কমান্ড-লাইনের প্রতিধ্বনিত হওয়ার সাথে দেখতে পাচ্ছি। আমি জানি না যে ওএসের ভিত্তিতে এসকিউএল স্ক্রিপ্টটি তৈরি হয়েছিল।

কী কারণে এটি ঘটছে এবং আমি কীভাবে এটি ঠিক করব?

উত্তর:


80

এটি ডস / উইন্ডোজ লাইন-শেষের অক্ষরগুলির কারণে ঘটে। অ্যান্ড হুইটফিল্ডের মতো, ইউনিক্স কমান্ড ডস 2 ইউনিক্স সমস্যা সমাধানে সহায়তা করবে। আপনি যদি আরও তথ্য চান, আপনি এই কমান্ডের ম্যান পেজগুলি পড়তে পারেন।


4
কিছু সিস্টেমে (যেমন উবুন্টু) এই কমান্ডটির নাম "fromdos"
বোবুইনহোল্ট

6
আপনি brew install dos2unixযখন হোমব্রব ইনস্টল করেছেন তখন আপনি ওএসএক্স-এ খুব সহজেই সরঞ্জামটি পেতে পারেন
ফিলিপ

74

viনিম্নলিখিত চালিয়ে লাইনের শেষ ঠিক করুন :

:set fileformat=unix

:w


4
এটি একটি উজ্জ্বল উত্তর। অনেক ধন্যবাদ. (ডস 2 ইউনিক্স ইনস্টল করা সংরক্ষণ করা হয়েছে, একটি সরঞ্জাম আমি সম্ভবত একবার ব্যবহার করতে পারি)
জামসি

4
এটি ^Mকোনও কারণে এস অপসারণ করতে পারে না। রেফারেন্স ফাইল: /etc/timidity/fluidr3_gm.cfg
phil294

39

উইন্ডোজ-ভিত্তিক ওএস এবং ইউনিক্স ভিত্তিক ওএস কীভাবে লন্ডনের শেষের চিহ্নিতকারীগুলিকে সঞ্চয় করে তার মধ্যে পার্থক্যটি হ'ল।

উইন্ডোজ ভিত্তিক অপারেটিং সিস্টেমগুলি, তাদের ডসের heritageতিহ্যের জন্য ধন্যবাদ, একটি জোড় অক্ষর হিসাবে এক-অফ-লাইন সংরক্ষণ করে - 0x0D0A(ক্যারেজ রিটার্ন + লাইন ফিড)। ইউনিক্স-ভিত্তিক অপারেটিং সিস্টেমগুলি কেবলমাত্র 0x0A(একটি লাইন ফিড ) ব্যবহার করে । ^Mআপনি দেখছি চাক্ষুষ উপস্থাপনা 0x0D(ক গাড়ি ফেরত )।

ডস 2 ইউনিক্স এটিতে সহায়তা করবে। আপনার সম্ভবত স্ক্রিপ্টগুলির উত্সটি 'ইউনিক্স-বান্ধব' হিসাবে সমন্বিত করতে হবে।


আমি বলব না যে উইন্ডোজের বর্তমান সংস্করণগুলিতে কোনও ধরণের ডস হেরিটেজ রয়েছে । যদিও তাদের এখনও সামঞ্জস্যতা বাধা আছে।
জোয়

এটি হ'ল সহজ উপায়, আপনি কি একটি স্বয়ংক্রিয় রূপান্তর সরঞ্জামটি করেন। ধন্যবাদ
Pjl

তবে কেন ^M? কেন '^'? কেন 'এম'?
1737973

কারণ এটি একটি "নিয়ন্ত্রণ চরিত্র"। "^" হ'ল নিয়ন্ত্রণ কী ক্লিক করার চাক্ষুষ উপস্থাপনা। এর নির্দিষ্ট নির্দিষ্ট বাইটের নীচে, ^ হ'ল সম্পাদক কীভাবে তাদের উপস্থাপন করে।
হেজাজমান

24

সবচেয়ে সহজ উপায় হ'ল ব্যবহার করা viআমি জানি যে এটি ভয়ানক শোনায় তবে এর সাধারণ এবং ইতোমধ্যে বেশিরভাগ ইউনিক্স পরিবেশে ইনস্টল। ^ এম উইন্ডোজ / ডস পরিবেশের একটি নতুন লাইন।

কমান্ড প্রম্পট থেকে: $ vi filename

তারপরে :কমান্ড মোডে পেতে " " টিপুন ।

সমস্ত বিশ্বব্যাপী অনুসন্ধান এবং প্রতিস্থাপন হ'ল :%s/^M//g" টিপুন এবং নিয়ন্ত্রণ ধরে রাখুন তারপরে ভি টি এম টিপুন " যা ^ এমকে কিছুই না করে প্রতিস্থাপন করবে।

তারপরে লিখতে এবং ছাড়তে প্রবেশ করুন " :wq" হয়ে গেল!


কিভাবে এটি ইম্যাক্সে প্রতিস্থাপন করবেন?
হারবার্টডি

4
^ এম অক্ষরটি কীভাবে টাইপ করতে হয় তার বিস্তারের জন্য ধন্যবাদ! আমি পরিবর্তে এটি \ r দিয়ে প্রতিস্থাপন করব। তাই আমি করেছি:% s / ^ এম / \ আর / জি
আহরিস ৮৮


10

Vi তে, ক :%s/^M//g

পেতে ^Mহোল্ড CTRLকী, প্রেস Vতারপর M(উভয় নিয়ন্ত্রণ কী ধরে রাখার সময়) এবং ^Mউপস্থিত হবে। এটি সমস্ত উপস্থিতি খুঁজে বের করবে এবং এগুলিকে কিছুই না করে প্রতিস্থাপন করবে।


4
ইউনিট বান্ধব লাইন বিরতির সাথে with এম প্রতিস্থাপন করতে::%s/^M/\r/g
গ্যারি ওক

8

এসকিউএল স্ক্রিপ্টটি মূলত একটি উইন্ডোজ ওএসে তৈরি হয়েছিল। 'And এম' অক্ষরগুলি উইন্ডোজ এবং ইউনিক্সের একটি পরিণতি যা লাইন-এর শেষের অক্ষরের জন্য কী ব্যবহার করতে হবে সে সম্পর্কে বিভিন্ন ধারণা রাখে। এটি ঠিক করতে আপনি কমান্ড লাইনে পার্ল ব্যবহার করতে পারেন।

perl -pie 's/\r//g' filename.txt

অবশ্যই, আপনি পার্ল ব্যবহার করতে পারেন, তবে আপনি ডস 2 ইউনিক্সের চেয়ে পার্লের পরামর্শ দিতে পারেন?
থমাস ওপেন

4
আমি কেবল একটি বিকল্প সরবরাহ করছি, যেহেতু চার জন ইতিমধ্যে ডস 2 ইউনিক্স ব্যবহার করতে বলেছে।
বিল

4
হ্যাঁ, আমি এটি দরকারী হিসাবে পেয়েছি কারণ আমি একটি প্রাগৈতিহাসিক আইটি বিভাগের একটি অফিসে কাজ করে একটি পশ্চাদপদ ওয়ার্কস্টেশনে আছি। আমি ভিন্নতাটি ব্যতীত: পার্ল -পি-পি-এস "এস / \ এক্স0 ডি / \ n / জি" file.csv
রিমিয়ান

7

উইন্ডোজ অপারেটর নিউলাইনগুলি দ্বারা সাধারণত ^ এম হয় এবং ইউনিক্সে অনুবাদ করা একটি এম ^ এম এর মতো লাগে। ডস 2 ইউনিক্স কমান্ডটি তাদের সুন্দরভাবে মুছে ফেলা উচিত

ডস 2 ইউনিক্স [অপশনগুলি] [-সি কনমোড] [-ও ফাইল ...] [ইনফাইলে আউটফাইলে ...]


5
C:\tmp\text>dos2unix hello.txt helloUNIX.txt

শেড আরও বিস্তৃতভাবে উপলব্ধ এবং ডস 2 ইউনিক্স ইনস্টল না করা থাকলে এই ধরণের জিনিসটি করতে পারেন

C:\tmp\text>sed s/\r// hello.txt > helloUNIX.txt  

আপনি ট্র চেষ্টা করতে পারেন:

cat hello.txt | tr -d \r > helloUNIX2.txt  

ফলাফল এখানে:

C:\tmp\text>dumphex hello.txt  
00000000h: 48 61 68 61 0D 0A 68 61 68 61 0D 0A 68 61 68 61 Haha..haha..haha  
00000010h: 0D 0A 0D 0A 68 61 68 61 0D 0A                   ....haha..  

C:\tmp\text>dumphex helloUNIX.txt  
00000000h: 48 61 68 61 0A 68 61 68 61 0A 68 61 68 61 0A 0A Haha.haha.haha..  
00000010h: 68 61 68 61 0A                                  haha.  

C:\tmp\text>dumphex helloUNIX2.txt  
00000000h: 48 61 68 61 0A 68 61 68 61 0A 68 61 68 61 0A 0A Haha.haha.haha..  
00000010h: 68 61 68 61 0A                                  haha.  

4

Vi সম্পাদনায় in এম অক্ষরগুলি প্রতিস্থাপন করতে নীচে ব্যবহার করুন

t1.txt বলে পাঠ্য ফাইলটি খুলুন

vi t1.txt

টিপে কমান্ড মোড প্রবেশ করান shift + :

তারপরে উল্লিখিত অনুযায়ী কীগুলি টিপুন %s/^M/\r/g

in above ^M is not (shift + 6)M instead it is (ctrl + V)(ctrl + M)

আপনার শেষ লাইনটি আমি পূর্ববর্তী সমস্ত উত্তর থেকে অনুপস্থিত ছিল। আমি 'কোনও মিল খুঁজে পাওয়া যায়নি বিসি আমি শিফট + 6 করছিলাম, তাই আমি প্রতিটি হ্যাকার যা করতাম তা করেছিলাম এবং আমার নিজের সমাধানটি দিয়ে আমার ভুল বোঝাবুঝি করে ফেলেছিলাম: প্রতিটি লাইনের শেষে যেতে ম্যাক্রো রেকর্ড করুন এবং তারপরে এক্স টিপুন, শুধু ফাইলের লাইনের সংখ্যার জন্য পুনরায় ম্যাক্রো করুন।
দার্থাস

3

dos2unixকমান্ডের বিকল্প হ'ল স্ট্যান্ডার্ড ইউটিলিটিগুলি ব্যবহার করা sed

উদাহরণস্বরূপ, ডস টু ইউনিক্স:

sed 's/\r$//' dos.txt > unix.txt

ইউনিক্স থেকে ডস:

sed 's/$/\r/' unix.txt > dos.txt

1

আপনি সিড কমান্ডের মাধ্যমে সরাসরি ফাইল থেকে এম এম সরিয়ে ফেলতে পারেন, যেমন:

sed -i'.bak' s/\r//g *.*

যদি আপনি এই পরিবর্তনগুলি নিয়ে খুশি হন তবে .bak ফাইলগুলি সরান:

rm -v *.bak

1

ডস / উইন্ডোজ (\ r \ n) লাইনের শেষটি ইউনিক্সে (\ n) লাইন এন্ডিংয়ে ট্রের সাথে রূপান্তর করুন:

tr '\r\n' '\n' < dosFile.txt > unixFile.txt

ইউনিক্স কমান্ড লাইন থেকে নতুন লাইনগুলি প্রতিস্থাপন সম্পর্কে পোস্ট করুন


0

od -a $file লিনাক্সে এই ধরণের প্রশ্নের অন্বেষণ করতে দরকারী (উপরের ডাম্পেক্সের অনুরূপ)।


0

পার্লে, আপনি যদি $ / ভেরিয়েবল সেট করতে না চান এবং chomp () ব্যবহার করতে পারেন তবে আপনিও করতে পারেন:

$var =~ /\r\n//g;

আমার দুই সেন্ট


-1

আরেকটি vi কমান্ড যা করব: :%s/.$// এটি ফাইলের প্রতিটি লাইনের শেষ অক্ষরটি সরিয়ে দেয়। এই অনুসন্ধান এবং প্রতিস্থাপন কমান্ডের অপূর্ণতা হ'ল এটি শেষ চরিত্রটি কী তা বিবেচ্য করে না, তাই এটি দুটিবার কল না করার বিষয়ে সতর্ক থাকুন।


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