ডস / উইন্ডোজ নিউলাইন (সিআরএলএফ) কে বাশ স্ক্রিপ্টে ইউনিক্স নিউলাইন (এলএফ) এ রূপান্তর করবেন কীভাবে?


336

আমি কীভাবে প্রোগ্রামটিমেটিকভাবে (যেমন ব্যবহার না করে vi) ডস / উইন্ডোজ নিউলাইনগুলিকে ইউনিক্সে রূপান্তর করতে পারি?

dos2unixএবং unix2dosকমান্ড নির্দিষ্ট সিস্টেমে উপলব্ধ নয়। আমি কীভাবে sed/ awk/ এর মতো কমান্ড দিয়ে এগুলি অনুকরণ করতে পারি tr?


9
সাধারণভাবে, কেবল dos2unixআপনার প্যাকেজ ম্যানেজার ব্যবহার করে ইনস্টল করুন , এটি সত্যিই অনেক সহজ এবং বেশিরভাগ প্ল্যাটফর্মে রয়েছে।
ব্র্যাড কোচ

1
একমত! @ ব্র্যাডকোচ ম্যাক ওএসএক্সে 'ব্রিউ ইনস্টল ডস 2 ইউনিক্স' হিসাবে সরল
স্মাইলিট

উত্তর:


322

আপনি trডস থেকে ইউনিক্সে রূপান্তর করতে ব্যবহার করতে পারেন ; তবে, সিআরএল কেবলমাত্র কোনও সিআরএলএফ বাইট জুটির প্রথম বাইট হিসাবে আপনার ফাইলে উপস্থিত হলে আপনি নিরাপদে এটি করতে পারবেন। সাধারণত এটি হয়। তারপরে আপনি ব্যবহার করুন:

tr -d '\015' <DOS-file >UNIX-file

মনে রাখবেন যে নামটি নামের DOS-fileথেকে পৃথক UNIX-file; যদি আপনি একই নামটি দু'বার ব্যবহার করার চেষ্টা করেন তবে আপনার ফাইলটিতে কোনও ডেটা থাকবে না।

আপনি অন্যভাবে এটি করতে পারবেন না (স্ট্যান্ডার্ড 'টিআর' দিয়ে)।

যদি আপনি কীভাবে গাড়ীতে প্রবেশ করতে চান তবে কোনও স্ক্রিপ্টে ফিরে ( control-V, control-Mনিয়ন্ত্রণ-এমতে প্রবেশ করতে), তবে:

sed 's/^M$//'     # DOS to Unix
sed 's/$/^M/'     # Unix to DOS

যেখানে '^ এম' হল নিয়ন্ত্রণ-এম অক্ষর character আপনি গাড়ীর রিটার্ন নির্দিষ্ট করতে bash এএনএসআই-সি উদ্ধৃতি প্রক্রিয়াটিও ব্যবহার করতে পারেন:

sed $'s/\r$//'     # DOS to Unix
sed $'s/$/\r/'     # Unix to DOS

তবে, যদি আপনি এটি প্রায়শই করতেই চলেছেন (একাধিকবার, মোটামুটিভাবে বলতে), রূপান্তর প্রোগ্রামগুলি ইনস্টল করা (যেমন dos2unixএবং unix2dos, বা সম্ভবত dtouএবং utod) এটি ব্যবহার করা অনেক বেশি বোধগম্য ।

আপনার যদি পুরো ডিরেক্টরি এবং উপ-ডিরেক্টরিগুলি প্রক্রিয়া করার প্রয়োজন হয় তবে আপনি ব্যবহার করতে পারেন zip:

zip -r -ll zipfile.zip somedir/
unzip zipfile.zip

এটি সিআরএলএফ থেকে সিআর-এ পরিবর্তিত লাইনের শেষের সাথে একটি জিপ সংরক্ষণাগার তৈরি করবে। unzipএরপরে রূপান্তরিত ফাইলগুলি আবার জায়গায় ফেলা হবে (এবং আপনাকে ফাইলের মাধ্যমে ফাইলটি জিজ্ঞাসা করুন - আপনি উত্তর দিতে পারেন: হ্যাঁ-টু-অল)। এটি নির্দেশ করার জন্য @vmsnomad এর ক্রেডিট।


9
tr -d '\015' <DOS-file >UNIX-fileযেখানে DOS-file== ব্যবহার করে UNIX-fileখালি ফাইলের ফলাফল হয়। দুর্ভাগ্যক্রমে আউটপুট ফাইলটি আলাদা ফাইল হতে হবে।
বাটল বাটকস

3
@ বাটলবাটকাস: আচ্ছা, হ্যাঁ; এজন্য আমি দুটি আলাদা নাম ব্যবহার করেছি। প্রোগ্রামটি সব পড়ার আগে আপনি যদি ইনপুট ফাইলটি জ্যাপ করেন তবে আপনি একই নামটি দুবার ব্যবহার করার সময় যেমন করেন, আপনি খালি ফাইলটি শেষ করেন। এটি ইউনিক্সের মতো সিস্টেমে অভিন্ন আচরণ। নিরাপদে নিরাপদে একটি ইনপুট ফাইল ওভাররাইটিং পরিচালনা করতে এর জন্য বিশেষ কোড দরকার। নির্দেশাবলী অনুসরণ করুন এবং আপনি ঠিক থাকবেন।
জোনাথন লেফলার

আমার মনে হচ্ছে ইন-ফাইল অনুসন্ধান-প্রতিস্থাপন কার্যকারিতা কোনওরকম মনে আছে।
বাটাল বুট্কাস

4
জায়গা আছে; সেগুলি কোথায় খুঁজে পেতে হবে তা আপনাকে জানতে হবে। সীমাবদ্ধতার মধ্যে, জিএনইউ sedবিকল্পটি -i(ইন-প্লেসে) কাজ করে; সীমা লিঙ্কযুক্ত ফাইল এবং symlinks হয়। sortকমান্ড আছে 'সবসময়' (1979 সাল থেকে তার আগে যদি না) সমর্থিত -oবিকল্প যা ইনপুট ফাইল এক তালিকাবদ্ধ করতে পারেন। তবে এটি অংশে রয়েছে কারণ sortএর আউটপুটটির কোনও লেখার আগে অবশ্যই এর সমস্ত ইনপুট অবশ্যই পড়তে হবে। অন্যান্য প্রোগ্রামগুলি স্বতঃস্ফূর্তভাবে তাদের ইনপুট ফাইলগুলির একটিতে ওভাররাইটিং সমর্থন করে। কার্নিগান অ্যান্ড পাইকের 'দ্য ইউনিক্স প্রোগ্রামিং এনভায়রনমেন্ট'-এ সমস্যা এড়াতে আপনি একটি সাধারণ উদ্দেশ্য প্রোগ্রাম (স্ক্রিপ্ট) পেতে পারেন ।
জোনাথন লেফলার

3
তৃতীয় বিকল্পটি আমার জন্য কাজ করেছে, ধন্যবাদ। আমি -i বিকল্পটি ব্যবহার করেছি: sed -i $'s/\r$//' filename- জায়গায় সম্পাদনা করতে। আমি এমন একটি মেশিনে কাজ করছি যা ইন্টারনেটে অ্যাক্সেস নেই, সুতরাং সফ্টওয়্যার ইনস্টলেশন একটি সমস্যা।
ওয়ারেন ডিউ

64
tr -d "\r" < file

উদাহরণস্বরূপ এখানে ব্যবহার করে দেখুন sed:

# IN UNIX ENVIRONMENT: convert DOS newlines (CR/LF) to Unix format.
sed 's/.$//'               # assumes that all lines end with CR/LF
sed 's/^M$//'              # in bash/tcsh, press Ctrl-V then Ctrl-M
sed 's/\x0D$//'            # works on ssed, gsed 3.02.80 or higher

# IN UNIX ENVIRONMENT: convert Unix newlines (LF) to DOS format.
sed "s/$/`echo -e \\\r`/"            # command line under ksh
sed 's/$'"/`echo \\\r`/"             # command line under bash
sed "s/$/`echo \\\r`/"               # command line under zsh
sed 's/$/\r/'                        # gsed 3.02.80 or higher

sed -iইন-প্লেস রূপান্তরকরণের জন্য যেমন ব্যবহার করুন sed -i 's/..../' file


10
আমার ফাইলটিতে কেবল যেহেতু আমি বৈকল্পিক ব্যবহার করেছি \r:tr "\r" "\n" < infile > outfile
ম্যাট টড

1
@ ম্যাটটড আপনি উত্তর হিসাবে পোস্ট করতে পারেন? এটি -dআরও ঘন ঘন বৈশিষ্ট্যযুক্ত এবং "শুধুমাত্র \r" পরিস্থিতিতে সাহায্য করবে না ।
n611x007

5
লক্ষ্য করুন প্রস্তাবিত \rকরার \nম্যাপিং ডাবল ব্যবধান ফাইলের প্রভাব রয়েছে; ডস-এ শেষ হওয়া প্রতিটি সিআরএলএফ লাইন \n\nইউনিক্সে পরিণত হয়।
জোনাথন লেফলার

আমি কি এটি পুনরাবৃত্তি করতে পারি?
অ্যারন ফ্র্যাঙ্ক

36

পসিক্স দিয়ে এটি করা কঠিন:

গাড়ীর রিটার্ন অপসারণ করতে:

ex -bsc '%!awk "{sub(/\r/,\"\")}1"' -cx file

গাড়ীর রিটার্ন যুক্ত করতে:

ex -bsc '%!awk "{sub(/$/,\"\r\")}1"' -cx file

2
দেখে মনে হচ্ছে পসিএক্স trসমর্থন করে \r সুতরাং আপনি এটি ব্যবহার করতে পারেন printf '%s\n' '%!tr -d "\r"' x | ex file(যদিও মঞ্জুর করা হয়েছে, এটি \rতাত্ক্ষণিকভাবে পূর্ববর্তী না হলেও সরিয়ে দেওয়া হয়েছে \n)। এছাড়াও, পসিক্স দ্বারা নির্দিষ্ট না -bকরার বিকল্পটি ex
ওয়াইল্ডকার্ড

1
পসিক্সে এটি করা সহজ। স্ক্রিপ্টে সিআর আক্ষরিক এটি টাইপ করে এম্বেড করুন (এটি নিয়ন্ত্রণ-এম)।
জোশুয়া

28

আপনি -c {কমান্ড option বিকল্পটি দিয়ে vim প্রোগ্রামমেটিক্যালি ব্যবহার করতে পারেন:

ইউনিক্সে করণীয়:

vim file.txt -c "set ff=unix" -c ":wq"

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

vim file.txt -c "set ff=dos" -c ":wq"

"সেট এফএফ = ইউনিক্স / ডস" মানে ফাইলের ফাইল ফর্ম্যাট (এফএফ) লাইন বিন্যাসের শেষে ইউনিক্স / ডস এ পরিবর্তন করুন

": wq" এর অর্থ ডিস্কে ফাইল লিখুন এবং সম্পাদকটি ছেড়ে দিন (একটি লুপে কমান্ডটি ব্যবহার করার অনুমতি দেয়)


3
এটি সবচেয়ে মার্জিত সমাধানের মতো মনে হয়েছিল তবে ডাব্লিউকিউ অর্থ কী তা ব্যাখ্যা করার অভাবটি দুর্ভাগ্যজনক।
জোরিক স্লেইজস্টার

5
যে কেউ ব্যবহার করে viসে এর :wqঅর্থ বুঝতে পারবে will তাদের জন্য যা 3 টি অক্ষর বোঝায় না 1) ওপেন vi কমান্ড অঞ্চল, 2) লিখুন এবং 3) প্রস্থান করুন।
ডেভিড নিউকম্ব

আমার ধারণা ছিল না আপনি ইন্টারেক্টিভভাবে সিএমএলির কাছ থেকে কমান্ড যুক্ত করতে পারবেন
রবার্ট ডন্ডন

আপনি ": x" ":
ডব্লিউকিউ

25

AWK ব্যবহার করে আপনি করতে পারেন:

awk '{ sub("\r$", ""); print }' dos.txt > unix.txt

পার্ল ব্যবহার করে আপনি এটি করতে পারেন:

perl -pe 's/\r$//' < dos.txt > unix.txt

2
একটি দুর্দান্ত, বহনযোগ্য awk সমাধান।
mklement0

23

জায়গা ব্যবহারে একটি ফাইল রূপান্তর করতে

dos2unix <filename>

পরিবর্তিত পাঠ্যকে আলাদা ফাইলের আউটপুট দিতে

dos2unix -n <input-file> <output-file>

আপনি এটি উবুন্টু বা ডেবিয়ান দিয়ে ইনস্টল করতে পারেন

sudo apt install dos2unix

বা ম্যাকোজে হোমব্রিউ ব্যবহার করে

brew install dos2unix

1
আমি জানি প্রশ্নটি ডস 2 ইউনিক্সের বিকল্পগুলির জন্য জিজ্ঞাসা করে তবে এটি প্রথম গুগল ফলাফল।
বোরিস

18

এই সমস্যাটি স্ট্যান্ডার্ড সরঞ্জামগুলির সাহায্যে সমাধান করা যেতে পারে, তবে flipঅজ্ঞদের পক্ষে যথেষ্ট পরিমাণে ফাঁদ রয়েছে যা আমি আপনাকে সুপারিশ করি যে আপনি কমান্ডটি ইনস্টল করবেন , যা লিখেছেন 20 বছর আগে রাহুল ধেসি, রচয়িতা zoo। এটি ফাইলের ফর্ম্যাটগুলিকে রূপান্তর করার জন্য একটি দুর্দান্ত কাজ করে যখন উদাহরণস্বরূপ, বাইনারি ফাইলগুলির অজানা ধ্বংসকে এড়িয়ে যাওয়া, আপনি যদি দেখেন যে প্রতিটি সিআরএলএফ পরিবর্তনের জন্য আপনি কেবল দৌড়াদৌড়ি করেন তবে কিছুটা সহজ ...


মূল ফাইলটি পরিবর্তন না করে কোনও স্ট্রিমিং ফ্যাশনে এটি করার কোনও উপায়?
আগস্ট

@ আউগুরার আপনি "অনুরূপ প্যাকেজগুলি" প্যাকেজগুলি
উইহিজি

আমার কাছে ঠিক একটি ভুল পতাকা দিয়ে টেক্সটক্সটো চালিয়ে আমার ওএসের অর্ধেক ভাঙ্গার অভিজ্ঞতা ছিল। বিশেষ করে আপনি যদি পুরো ফোল্ডারে এটি করতে চান তবে সাবধান হন।
এএপি

14

এখনও অবধি পোস্ট হওয়া সমাধানগুলি সমস্যার কিছু অংশ নিয়ে ডস / উইন্ডোজের সিআরএলএফকে ইউনিক্সের এলএফতে রূপান্তরিত করে; তারা যে অংশটি হারিয়েছে তা হ'ল ডস একটি লাইন বিভাজক হিসাবে সিআরএলএফ ব্যবহার করে , যখন ইউনিক্স এলএফকে লাইন টার্মিনেটর হিসাবে ব্যবহার করে । পার্থক্যটি হ'ল কোনও ডস ফাইলের (সাধারণত) ফাইলটিতে শেষ লাইনের পরে কিছুই থাকবে না, যখন ইউনিক্স থাকবে। রূপান্তরটি সঠিকভাবে করতে, আপনাকে সেই চূড়ান্ত এলএফ যুক্ত করতে হবে (যদি না ফাইলটি শূন্য দৈর্ঘ্যের হয়, অর্থাত্ এতে কোনও লাইন থাকে না)। এর জন্য আমার প্রিয় প্রসারণ (ম্যাক-স্টাইলের সিআর-বিচ্ছিন্ন ফাইলগুলি হ্যান্ডেল করার জন্য সামান্য যুক্ত যুক্তি সহ, এবং ইতিমধ্যে ইউনিক্স ফর্ম্যাটে থাকা মোলস্ট ফাইলগুলি নয়) কিছুটা পার্ল:

perl -pe 'if ( s/\r\n?/\n/g ) { $f=1 }; if ( $f || ! $m ) { s/([^\n])\z/$1\n/ }; $m=1' PCfile.txt

নোট করুন যে এটি স্ট্যান্ডআউটে ফাইলের ইউনিক্সাইড সংস্করণ প্রেরণ করে। আপনি যদি কোনও ইউনিক্সাইড সংস্করণ দিয়ে ফাইলটি প্রতিস্থাপন করতে চান তবে পারেলের -iপতাকা যুক্ত করুন।


@ লুডোভিজজেনোহেটালাগাউয়ার্ডেট কী এটি একটি সরল পাঠ্য ফাইল (যেমন সিএসভি বা ট্যাব-বিহীন পাঠ্য) ছিল, বা অন্য কিছু? যদি এটি কোনও ডাটাবেস-ইশ ফর্ম্যাটে থাকে তবে এটিকে এমনভাবে চালিত করা হয়েছে যেন এটি পাঠ্যটি এর অভ্যন্তরীণ কাঠামোকে নষ্ট করার সম্ভাবনা রয়েছে।
গর্ডন ডেভিসন

একটি সরল পাঠ্য সিএসভি, তবে আমি মনে করি এনকোডিংটি অদ্ভুত ছিল। আমি মনে করি এটির কারণেই এটি গণ্ডগোল হয়েছে। তবে চিন্তা করবেন না। আমি সর্বদা ব্যাকআপগুলি সংগ্রহ করি এটি একটি আসল ডেটাसेटও ছিল না, কেবল 1 জিবি। আসলটি একটি 26 জিবি।
লুডোভিচ জেনোহাতে লাগোয়ার্ডেট

14

আপনার যদি ডস 2 ইউনিক্স অ্যাক্সেস না রাখেন তবে এই পৃষ্ঠাটি পড়তে পারেন তবে আপনি এখান থেকে ডস 2 ইউনিক্স.পি অনুলিপি / পেস্ট করতে পারেন ।

#!/usr/bin/env python
"""\
convert dos linefeeds (crlf) to unix (lf)
usage: dos2unix.py <input> <output>
"""
import sys

if len(sys.argv[1:]) != 2:
  sys.exit(__doc__)

content = ''
outsize = 0
with open(sys.argv[1], 'rb') as infile:
  content = infile.read()
with open(sys.argv[2], 'wb') as output:
  for line in content.splitlines():
    outsize += len(line) + 1
    output.write(line + '\n')

print("Done. Saved %s bytes." % (len(content)-outsize))

সুপারসার থেকে ক্রস পোস্ট ।


1
ব্যবহার বিভ্রান্তিকর। বাস্তব dos2unixধর্মান্তরিত সব ইনপুট ডিফল্টরূপে ফাইল। আপনার ব্যবহার -nপ্যারামিটার বোঝায় । এবং আসল dos2unixএকটি ফিল্টার যা স্টাডিনের কাছ থেকে পড়ে, স্টাডাউটকে লেখেন যদি ফাইলগুলি না দেওয়া হয়।
jfs

8

পিসিআরই দিয়ে সুপার ডুপার সহজ;

স্ক্রিপ্ট হিসাবে, বা $@আপনার ফাইলগুলি প্রতিস্থাপন করুন।

#!/usr/bin/env bash
perl -pi -e 's/\r\n/\n/g' -- $@

এটি জায়গায় আপনার ফাইলগুলি ওভাররাইট করবে!

আমি কেবল এটি ব্যাকআপ (সংস্করণ নিয়ন্ত্রণ বা অন্যথায়) দিয়ে করার পরামর্শ দিচ্ছি


ধন্যবাদ! এটি কাজ করে, যদিও আমি ফাইলের নাম লিখছি এবং না --। আমি এই সমাধানটি বেছে নিয়েছি কারণ এটি আমার পক্ষে বুঝতে এবং অভিযোজিত করা সহজ। এফওয়াইআই, স্যুইচগুলি এটি করে: -pএকটি "ইনপুট" লুপ ধরে নিন, -iজায়গায় ইনপুট ফাইল সম্পাদনা করুন, -eনিম্নলিখিত কমান্ডটি সম্পাদন করুন
রল্ফ

কড়া কথায় বলতে গেলে, পিসিআরই পার্লের রেজেক্স ইঞ্জিন নয়, পার্লের রেজেক্স ইঞ্জিনের একটি পুনরায় বাস্তবায়ন। নামে প্রভাবিত হওয়া সত্ত্বেও ভিন্নতা রয়েছে যদিও তাদের উভয়েরই এই ক্ষমতা রয়েছে।
ট্রিপলি

6

একটি এমনকি সহজ awk সমাধান ডাব্লু / ওএ প্রোগ্রাম:

awk -v ORS='\r\n' '1' unix.txt > dos.txt

প্রযুক্তিগতভাবে '1' আপনার প্রোগ্রাম, বি / সি awk দেওয়া দরকার হলে বিকল্প দেওয়া হয়।

আপডেট : দীর্ঘসময় এই পৃষ্ঠায় প্রথমবারের মতো পুনর্বিবেচনা করার পরে আমি বুঝতে পেরেছিলাম যে এখনও পর্যন্ত কেউ অভ্যন্তরীণ সমাধান পোস্ট করেনি, তাই এখানে একটি:

while IFS= read -r line;
do printf '%s\n' "${line%$'\r'}";
done < dos.txt > unix.txt

এটি সহজ, তবে কেবল স্পষ্ট করে বলার জন্য: এটি ইউনিক্স -> উইন্ডোজ / ডস অনুবাদ করে, যা ওপি যা চেয়েছিল তার বিপরীত দিক
mklement0

5
এটি উদ্দেশ্যমূলকভাবে করা হয়েছিল, এটি লেখকের অনুশীলন হিসাবে ছেড়ে দেওয়া হয়েছে। ইয়ারললস awk -v RS='\r\n' '1' dos.txt > unix.txt
নবীন

দুর্দান্ত (এবং আপনাকে শিক্ষাগত চিকিত্সার জন্য কুডোস)।
mklement0

1
"বি / সি অ্যাজকের বিকল্প দেওয়া হলে একটি প্রয়োজন" " - awk সর্বদা একটি প্রোগ্রামের প্রয়োজন, বিকল্পগুলি নির্দিষ্ট করা আছে কিনা।
mklement0

1
খাঁটি বাশ সমাধান আকর্ষণীয় তবে সমতুল্য awkবা sedসমাধানের চেয়ে অনেক ধীর । এছাড়াও, আপনাকে অবশ্যই while IFS= read -r lineইনপুট লাইনগুলি বিশ্বস্ততার সাথে সংরক্ষণ করতে ব্যবহার করতে হবে , অন্যথায় নেতৃস্থানীয় এবং পেছনের শ্বেত স্পেসটি ছাঁটা হয়েছে (বিকল্পভাবে, readকমান্ডে কোনও পরিবর্তনশীল নাম ব্যবহার করবেন না এবং এর সাথে কাজ করবেন $REPLY)।
mklement0

5

আকর্ষণীয়ভাবে উইন্ডোতে আমার গিট-ব্যাশে sed ""কৌশলটি ইতিমধ্যে করেছে:

$ echo -e "abc\r" >tst.txt
$ file tst.txt
tst.txt: ASCII text, with CRLF line terminators
$ sed -i "" tst.txt
$ file tst.txt
tst.txt: ASCII text

আমার অনুমান যে ইনপুট থেকে লাইনগুলি পড়ার সময় সেড সেগুলি উপেক্ষা করে এবং আউটপুটটিতে সর্বদা ইউনিক্স লাইন এন্ডিংগুলি লেখেন।


4

এটি আমার পক্ষে কাজ করেছে

tr "\r" "\n" < sampledata.csv > sampledata2.csv 

9
এটি প্রতি একক ডস-নিউলাইনটিকে দুটি ইউনিক্স-নিউলাইনে রূপান্তর করবে ।
মেলিবিয়াস

4

ঠিক একই প্রশ্নটি করা উচিত ছিল (উইন্ডোজ সাইডে, তবে লিনাক্সের ক্ষেত্রেও সমানভাবে প্রযোজ্য zip -ll)

zip -ll textfiles-lf.zip files-with-crlf-eol.*
unzip textfiles-lf.zip 

দ্রষ্টব্য: এটি মূল ফাইলের নামগুলি সংরক্ষণ করে তবে লাইন শেষটি এলএফএতে রূপান্তর করে একটি জিপ ফাইল তৈরি করবে। তারপরে unzipফাইলগুলিকে জিপড হিসাবে এক্সট্রাক্ট করতে হবে, এটি তাদের মূল নামগুলির সাথে (তবে এলএফ-এন্ডিং সহ) রয়েছে, যাতে কোনওভাবে যদি স্থানীয় মূল ফাইলগুলি ওভাররাইট করতে অনুরোধ করা হয়।

এর থেকে প্রাসঙ্গিক অংশ zip --help:

zip --help
...
-l   convert LF to CR LF (-ll CR LF to LF)

আমার মতে সেরা উত্তর, কারণ এটি সম্পূর্ণ ডিরেক্টরি এবং উপ-ডিরেক্টরিগুলি প্রক্রিয়া করতে পারে। আমি খুশি যে আমি এটি খুব নীচে খুঁড়েছি।
ক্যারাম

2

ম্যাক অসক্সের জন্য যদি আপনি হোমব্রু ইনস্টল করেন [ http://brew.sh/ عدال ী 1]

brew install dos2unix

for csv in *.csv; do dos2unix -c mac ${csv}; done;

নিশ্চিত হয়ে নিন যে আপনি ফাইলগুলির অনুলিপি তৈরি করেছেন, কারণ এই আদেশটি ফাইলগুলিকে পরিবর্তিত করবে। -C ম্যাক বিকল্পটি স্যুইচটিকে ওএসএক্সের সাথে সামঞ্জস্যপূর্ণ করে তোলে।


এই উত্তরটি প্রকৃতপক্ষে মূল পোস্টারের প্রশ্ন নয়।
hlin117

2
ওএস এক্স ব্যবহারকারীদের ব্যবহার করা উচিত নয় -c mac, যা প্রাক-ওএস এক্স-কেবলমাত্র CRনতুন লাইনে রূপান্তর করার জন্য । আপনি কেবলমাত্র ম্যাক ওএস 9 বা তার আগে ফাইলগুলির জন্য সেই মোডটি ব্যবহার করতে চান।
askewchan

2

TIMTOWTDI!

perl -pe 's/\r\n/\n/; s/([^\n])\z/$1\n/ if eof' PCfile.txt

@ গর্ডন ডেভিসনের উপর ভিত্তি করে

একটি অবশ্যই এর সম্ভাবনা বিবেচনা করা উচিত [noeol]...


2

আপনি awk ব্যবহার করতে পারেন। রেকর্ড বিভাজক ( RS) একটি রেইগ এক্সেপে সেট করুন যা সমস্ত সম্ভাব্য নিউলাইন অক্ষর বা অক্ষরগুলির সাথে মেলে। এবং ORSইউনিক্স-শৈলীর নতুন লাইন অক্ষরে আউটপুট রেকর্ড বিভাজক ( ) সেট করুন ।

awk 'BEGIN{RS="\r|\n|\r\n|\n\r";ORS="\n"}{print}' windows_or_macos.txt > unix.txt

এটিই আমার জন্য কাজ করেছেন (ম্যাকোস, মিমি git diffদেখায় , ভিমে সম্পাদিত)
ডোরিয়ান

2

লিনাক্সে ^ এম (সিটিআরএল-এম) কে * এক্স নিউ নিউলাইনস (^ জে) এ সেডের সাথে রূপান্তর করা সহজ।

এটি সিএলআই-তে এরকম কিছু হবে, পাঠ্যে আসলে একটি লাইন ব্রেক হবে। যাইহোক, sed যে ^ জে সাথে চালিয়ে যায়:

sed 's/^M/\
/g' < ffmpeg.log > new.log

আপনি টাইপ করার সাথে সাথে ^ V (ctrl-V), ^ M (ctrl-M) এবং \ (ব্যাকস্ল্যাশ) ব্যবহার করে এটি পাবেন:

sed 's/^V^M/\^V^J/g' < ffmpeg.log > new.log

এটি আমার জন্য কাজ করেছে, ধন্যবাদ!
ড্যান মান্তিলা

2
sed --expression='s/\r\n/\n/g'

যেহেতু প্রশ্নটি শেডের উল্লেখ করেছে, এটি অর্জনের জন্য এটি সবচেয়ে সহজ সরল পথ। অভিব্যক্তি যা বলে তা হ'ল সমস্ত ক্যারেজ-রিটার্ন এবং লাইন-ফিডকে কেবল লাইন-ফিডের সাথে প্রতিস্থাপন করা। উইন্ডোজ থেকে ইউনিক্সে যাওয়ার সময় আপনার যা প্রয়োজন তা হল। আমি যাচাই করেছি এটি কাজ করে।


আরে জন পল - এই উত্তরটি মুছে ফেলার জন্য পতাকাঙ্কিত হয়েছে তাই আমার জন্য একটি পর্যালোচনা সারিতে উঠে এসেছিল। সাধারণভাবে, যখন আপনি 22 বছরের উত্তর সহ 8 বছরের পুরানো এই জাতীয় একটি প্রশ্ন পেয়েছেন, আপনি অন্য উত্তরগুলি যেভাবে উত্তর নয় সেভাবে আপনার উত্তর কীভাবে কার্যকর তা আপনি ব্যাখ্যা করতে চাইবেন।
zzxyz

0

জোনাথন লেফলারের ইউনিক্সকে ডস সমাধানে বর্ধন হিসাবে, আপনি যখন ফাইলটির বর্তমান লাইন শেষের বিষয়ে অনিশ্চিত হন তখন নিরাপদে ডস-এ রূপান্তর করতে:

sed '/^M$/! s/$/^M/'

এটি পরীক্ষা করে যে সিআরএলএফ রূপান্তর করার আগে লাইনটি ইতিমধ্যে সিআরএলএফ-এ শেষ হয় না।


0

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

convert-crlf-to-lf() {
    file="$1"
    tr -d '\015' <"$file" >"$file"2
    rm -rf "$file"
    mv "$file"2 "$file"
}

কেবলমাত্র নিশ্চিত করুন যে আপনার কাছে "file1.txt" এর মতো কোনও ফাইল রয়েছে যা "file1.txt2" ইতিমধ্যে বিদ্যমান নেই বা এটি ওভাররাইট করা হবে, আমি ফাইলটি সঞ্চয় করার জন্য অস্থায়ী জায়গা হিসাবে ব্যবহার করি।


0

ব্যাশ ৪.২ এবং আরও নতুন দিয়ে আপনি ট্রেলিং সিআরটি ফেলার জন্য এই জাতীয় কিছু ব্যবহার করতে পারেন, যা কেবল ব্যাশ বিল্ট-ইনগুলি ব্যবহার করে:

if [[ "${str: -1}" == $'\r' ]]; then
    str="${str:: -1}"
fi

-3

আমি OSX এ 's / ^ M $ //' file.txt পাশাপাশি আরও কয়েকটি পদ্ধতিতে চেষ্টা করেছি ( http://www.thingy-ma-jig.co.uk/blog/25-11-2010/fixing- ডস-লাইন-এন্ডিংস বা http://hintsforums.macworld.com/archive/index.php/t-125.html )। কোনওটিই কাজ করেনি, ফাইলটি অপরিবর্তিত রয়েছে (বিটিডব্লিউ Ctrl-v এন্টার পুনরুত্পাদন করতে ^ এম প্রয়োজন হয়েছিল)। শেষ পর্যন্ত আমি টেক্সটরঙ্গলার ব্যবহার করেছি। এটি কঠোরভাবে কমান্ড লাইন নয় তবে এটি কাজ করে এবং এটি অভিযোগ করে না।

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