প্রতি নিউলাইনের আগে কীভাবে ক্যারেজ রিটার্ন যুক্ত করবেন?


28

আমার কাছে একটি ফাইল রয়েছে যা কেবলমাত্র \nনতুন লাইনের জন্য ব্যবহার করে তবে আমার \r\nপ্রতিটি নতুন লাইনের জন্য এটি থাকা দরকার । কিভাবে আমি এটি করতে পারব?

উদাহরণস্বরূপ, আমি এটি ব্যবহার করে এটি ভিমে সমাধান করেছি :%s/\n/\r\n/g, তবে আমি একটি স্ক্রিপ্ট বা কমান্ড-লাইন অ্যাপ্লিকেশনটি ব্যবহার করতে চাই। কোন পরামর্শ?

আমি এটির সাথে sedবা এটি দেখার চেষ্টা করেছি grep, তবে আমি অবিলম্বে অব্যাহতি সিকোয়েন্স ওয়ার্ক্রাউন্ডগুলির দ্বারা বিভ্রান্ত হয়ে পড়েছি (এই আদেশগুলি দিয়ে আমি কিছুটা সবুজ)।

আগ্রহী হলে, আবেদনটি আমার প্রশ্ন / উত্তর সম্পর্কিত এখানে

উত্তর:


36

আপনি unix2dos ব্যবহার করতে পারেন (যা দেবিয়ান পাওয়া যায়):

unix2dos file

নোট যে এই বাস্তবায়ন একটি সন্নিবেশ করা হবে না CRযে সামনে LFকেবলমাত্র সেই আগে, LFগুলি ইতিমধ্যে এক (এবং শুধুমাত্র এক) পূর্বে নেই CRএবং বাইনারি ফাইল এড়িয়ে যাবে (ঐ যে 0x0 মধ্যে বাইট মান থাকতে -> 0x1f ছাড়া অন্য পরিসীমা LF, FF, TABবা CR)।

বা ব্যবহার করুন sed:

CR=$(printf '\r')
sed "s/\$/$CR/" file

বা ব্যবহার করুন awk:

awk '{printf "%s\r\n", $0}' file

বা ব্যবহার করুন perl:

perl -pe 's|\n|\r\n|' file

লক্ষ্য করুন unix2dox একটি সন্নিবেশ করা হবে না CRসামনে যে কেবলমাত্র সেই LFS ইতিমধ্যে এক (এবং শুধুমাত্র এক) সি আর পূর্বে নেই সামনে এলএফ।
স্টাফেন চেজেলাস

@ স্টাফেনচাজেলাস: বিন্দুটির জন্য ধন্যবাদ, এটি আমার উত্তরে যুক্ত করেছে।
cuonglm

1
আমার জন্য তথ্য চাবি টুকরা এখানে ব্যবহার করছিলেন '\r'সঙ্গে sedকৌতুক আছে।
rkesh

8

এটি ঠিক কি unix2dosকরে:

$ unix2dos file.txt

এটি file.txtসিআরএলএফ লাইন সমাপ্তির সাথে একটি সংস্করণ সহ স্থানে প্রতিস্থাপন করবে ।

আপনি যদি এটিটি করতে চান তবে আপনি sedপ্রতিটি লাইনের শেষে একটি ক্যারেজ রিটার্ন সন্নিবেশ করতে পারেন:

sed -e 's/$/\r/' file.txt

এটি s( $) দিয়ে লাইন ( ) এর শেষের ঠিক আগে শূন্য-আকারের অঞ্চলটি প্রতিস্থাপন করে \r। ইন-প্লেস রিপ্লেসমেন্ট করতে (যেমন unix2dosকরে) ব্যবহার করুন sed -i.bak, যদিও এটি একটি অ-মানক এক্সটেনশন - যদি আপনার এটি না থাকে তবে একটি অস্থায়ী ফাইল ব্যবহার করুন।


3
\rপ্রতিস্থাপনে ব্যবহার পোর্টেবল নয়। কমপক্ষে, এটি ম্যাক ওএসএক্সে কাজ করবে না।
cuonglm

নোট করুন যে ইউনিক্সডোডের বেশ কয়েকটি বাস্তবায়ন রয়েছে। (যেমন আপনি একটি নির্দিষ্ট বাস্তবায়ন হোম পৃষ্ঠাতে একটি লিঙ্ক দিতে চাইতে পারেন waterlan.home.xs4all.nl/dos2unix.html যেমন ডেবিয়ান পাওয়া যাবে) পরিবর্তে linux.die.net/man তা পরিষ্কার দেখা যায় না যা বাস্তবায়ন (বা সংস্করণ) নথিভুক্ত করা হয়। নোট কিছু আছে u2d, ux2dos, todosপ্রায় পাশাপাশি কমান্ড।
স্টাফেন চেজেলাস

2

আপনি যদি একটি ইউনিক্স মেশিন (OS X এর, লিনাক্স) উপর রূপান্তর করছেন হয়, সঙ্গে ফাইল খোলার viবা vim:

$ vim my-file

আপনি সন্নিবেশ মোডে নেই তা নিশ্চিত করতে ESC কী টিপুন, তারপরে টাইপ করুন

:set ff=dos

অথবা

:set fileformat=dos

এটি ফাইলের ফর্ম্যাটটি সেট করে রূপান্তর করে।

ফাইলটি লিখতে এবং সম্পাদকটির ব্যবহার ছাড়তে হবে

:wq

কমান্ড লাইনে আপনি করতে পারেন

$ vi +':w ++ff=dos' +':q' my-file

সমস্ত পদক্ষেপ ব্যাখ্যা করার জন্য ধন্যবাদ - একটি নবজাতকের জন্য এটি কী চলছে তা বোঝা আরও সহজ করে তোলে।
ব্যবহারকারী 3616725

2

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

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

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\r","");print>ARGV[1]}' file

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

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\n","\r&");print>ARGV[1]}' file

1

একটি বহনযোগ্য শেল ফাংশন যা এটি করবে:

u2dos() (set -f; IFS='
'; printf '%s\r\n' $(cat "$1"))

এটি দিয়ে আপনি করতে পারেন:

u2dos file >dosfile

1

জঞ্জাল মধ্যে আপনি চেষ্টা করতে পারেন

awk '{print $0 "\r"}'

অথবা

awk -v r=$'\r' '{print $0 r}'

$'\r'উদ্ধৃত মতো কয়েক শাঁস দ্বারা সমর্থিত ANSI-সি শৈলী একটি উদাহরণ ksh93, bash, zsh, mkshও FreeBSD sh এবং সম্ভবত একক ইউনিক্স স্পেসিফিকেশন 8 সংখ্যায় অন্তর্ভুক্ত করা

এটি অদ্ভুত চরিত্রগুলি প্রকাশ করার জন্য একটি সাধারণ উপায় সরবরাহ করে, এটি ব্যবহার করে দেখুন, উদাহরণস্বরূপ:

awk -v r=$'\U0001F608' '{print $0 r}'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.