একটি পাঠ্য ফাইলে লাইন-এন্ডিংগুলি কীভাবে সন্ধান করবেন?


303

আমি ব্যাখ্যায় কিছু ব্যাবহার করার চেষ্টা করছি আমাকে ব্যাখ্যার পরিবর্তে মুদ্রিত একটি ফাইলের লাইন শেষ দেখাতে। ফাইলটি এসএসআইএস / এসকিউএল সার্ভারের একটি ডাম্প যা প্রক্রিয়াকরণের জন্য একটি লিনাক্স মেশিন দ্বারা পড়ে।

  • ভিতরে কি কোনও সুইচ আছে vi,less , more, ইত্যাদি?

  • লাইন-এন্ডিংগুলি দেখার পাশাপাশি, এটি জানতে হবে যে এটি কোন ধরণের লাইন শেষ ( CRLFবা LF)। আমি এটি কীভাবে খুঁজে পাব?


1
সাধারণ টিপ: আপনি কোন * নিক্স / সাইগউইন কমান্ডটি ব্যবহার করতে পারেন সে সম্পর্কে যদি আপনার কোনও ধারণা থাকে তবে আপনি আপনার প্রয়োজনীয় কার্যকারিতা দিতে পারে এমন সুইচগুলি অনুসন্ধান করার জন্য সর্বদা এর ম্যানপেজটি দেখতে পারেন। যেমন man less,।
ডেভিড নদী

উত্তর:


421

আপনি fileলাইন শেষের ধরণের ইঙ্গিত দেওয়ার জন্য ইউটিলিটিটি ব্যবহার করতে পারেন ।

ইউনিক্স:

$ file testfile1.txt
testfile.txt: ASCII text

"ডস":

$ file testfile2.txt
testfile2.txt: ASCII text, with CRLF line terminators

"ডস" থেকে ইউনিক্সে রূপান্তর করতে:

$ dos2unix testfile2.txt

ইউনিক্স থেকে "ডস" এ রূপান্তর করতে:

$ unix2dos testfile1.txt

ইতিমধ্যে রূপান্তরিত ফাইল রূপান্তরকরণের কোনও প্রভাব নেই তাই অন্ধভাবে চালানো নিরাপদ (অর্থাত্ প্রথমে বিন্যাসটি পরীক্ষা না করা) যদিও সাধারণ দাবি অস্বীকারকারী যথারীতি প্রয়োগ করে।


9
এগুলিকে এখন মাঝে মাঝে যথাক্রমে "fromdos" এবং "todos" নামকরণ করা হয় (যেমন উবুন্টু 10.4+ তে হয়)
জেস চাদউইক

3
@ জেসচ্যাডউইক: হ্যাঁ, তবে কেবলমাত্র যদি আপনি স্পষ্টভাবে tofrodosপ্যাকেজটি ইনস্টল করেন sudo apt-get install tofrodos- ঠিক তেমনভাবে আপনাকে চালাতে sudo apt-get install dos2unixহবে dos2unixএবং করতে হবে unix2dos
mklement0

Actully dos2unix সব কাজ করতে পারবেন না, আমার মনে হয় stackoverflow.com/questions/23828554/dos2unix-doesnt-convert-m সেরা উত্তর দেয়
নাথন

@ নাথান: এতে dos2unixব্যর্থতা কী ? এই প্রশ্নের ওপি কেবল অস্পষ্টভাবে বিষয়টি বর্ণনা করে।
পরবর্তী বিজ্ঞপ্তি না হওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

@ ডেনিসউইলিইমসন ফাইল কমান্ড ডস 2 ইউনিক্সের আগে এবং পরে একই আউটপুট পেয়েছিল: xxx.c সি উত্স, এএসসিআইআই পাঠ্য, সিআর, এলএফ লাইন টার্মিনেটর সহ। আমি দেখতে পেলাম যে এই সি ফাইলটির লাইনের মাঝে ^ এম রয়েছে যা XXXXXX xx এম xxxxxxxxx পছন্দ করে
নাথান

127

ভিতরে vi ...

:set list লাইন শেষ দেখতে।

:set nolist স্বাভাবিক অবস্থায় ফিরে যেতে

আমি মনে করি না আপনি দেখতে পারেন \n বা \r\nএটিvi আপনি কোন ধরণের ফাইল (ইউনিক্স, ডস, ইত্যাদি) এটি দেখতে পারেন যে এটির কোন লাইনের শেষ রয়েছে ...

:set ff

বিকল্পভাবে, আপনার কাছ থেকে বা কেবল bashব্যবহার করতে পারেনod -t c <filename>od -c <filename> রিটার্ন প্রদর্শন ।


26
দুর্ভাগ্যক্রমে, আমি ভাবি না যে vi এই নির্দিষ্ট অক্ষরগুলি প্রদর্শন করতে পারে। আপনি od -c <ফাইল নাম> চেষ্টা করতে পারেন যা আমার বিশ্বাস। N বা \ r \ n প্রদর্শিত হবে।
রায়ান বার্গার

3
"কিসের জন্য এটি মূল্যবান" বিভাগে আপনি গ্রেস --regex = "^ এম" জারি করে ডস স্টাইলের সিআরএলএফের জন্য গ্রেপ করতে পারেন যেখানে ^ এম সিটিআরএল + ভি সিটিআরএল + এম। আপনি সেড কমান্ডের পরিবর্তে এগুলি সরাতে পারেন। এটি মূলত ডস 2 ইউনিক্স হিসাবে একই জিনিসটি করে
কাউবয়ডান

11
ভিমে: :set fileformatকোনটি unixবা dosভিম ফাইলের লাইন শেষের মধ্যে রয়েছে বলে মনে করবে তা জানিয়ে দেবে You আপনি এটি দ্বারা পরিবর্তন করতে পারেন :set fileformat=unix
ভিক্টর জামানমিয়ান

5
Vi / vim শুরু করার সময় -b পতাকাটি ব্যবহার করুন এবং তারপরে সিআর (^ এম) এবং এলএফ ($) শেষগুলি দেখতে তালিকা সেট করুন।
শমূয়েল

1
@ রায়ানবার্গার - দেখে মনে হচ্ছে আপনি এক-টি মিস করছেন। এটি হওয়া উচিত od -t c file/path, তবে নতুন প্রোগ্রামের জন্য ধন্যবাদ। দুর্দান্ত কাজ করেছেন!
এরিক ফসসাম

113

উবুন্টু 14.04:

সহজ cat -e <filename>কাজ ঠিক আছে।

এটি ইউনিক্স লাইন সমাপ্তি ( \nবা এলএফ) $এবং উইন্ডোজ লাইন সমাপ্তি ( \r\nবা সিআরএলএফ) হিসাবে প্রদর্শিত করে ^M$


7
ওএসএক্সেও কাজ করে। ভাল সমাধান। সহজ এবং আমার পক্ষে কাজ করেছেন যখন গৃহীত উত্তরটি দেয় নি। (দ্রষ্টব্য: কোনও .txtফাইল ছিল না )
dlsso

4
এম এর প্রদর্শনটি কি একটি ইস্টেরেগ / উইন্ডোজ বশ করছে?
টম এম

সোলারিসের সাথে কাজ করে না, তবে মানুষ বলে যে এটি কাজ করা উচিত ছিল
জিউস

101

ব্যাশ শেলের মধ্যে, চেষ্টা করুন cat -v <filename>। এটি উইন্ডোজ ফাইলগুলির জন্য ক্যারেজ-রিটার্ন প্রদর্শন করবে।

(এটি উইন্ডোজ এক্সপিতে সাইগউইনের মাধ্যমে rxvt এ আমার জন্য কাজ করেছিল)।

সম্পাদকের দ্রষ্টব্য: cat -vভিজ্যুয়ালাইজ \r(সিআর) অক্ষর। যেমন ^M। সুতরাং, লাইন-শেষের \r\nক্রমগুলি ^Mপ্রতিটি আউটপুট লাইনের শেষে প্রদর্শিত হবে । cat -eঅতিরিক্ত \nহিসাবে কল্পনা করা হবে , যেমন হিসাবে $। ( cat -etঅতিরিক্ত হিসাবে ট্যাব চরগুলি দৃশ্যমান করা হবে। হিসাবে ^I।)


3
@ ক্রিস্ক: চেষ্টা করুন echo -e 'abc\ndef\r\n' | cat -vএবং আপনার ^M" ডিএফ " এর পরে দেখা উচিত ।
পরবর্তী বিজ্ঞপ্তি না হওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

আমি ফাইলটি the এম (উইন্ডোজ / ডস ইওল) রয়েছে কিনা তা দেখতে চেয়েছিলাম এবং কেবল বিড়াল -v আমাকে তা দেখিয়েছিল। এর জন্য +1
আলী

1
^ এম = ডস / উইন্ডোজ শৈলী
বুধ

সংশোধন: সুতরাং, লাইন-এন্ডিং \ r \ n সিকোয়েন্সগুলি ^ এম $ হিসাবে প্রদর্শিত হবে
শায়ান

19

^Mকম ব্যবহারে সিআর দেখাতে less -uবা -uএকবার টাইপ করলে কম খোলা হয়।

man less বলেছেন:

-u or --underline-special

      Causes backspaces and carriage returns to be treated  as  print-
      able  characters;  that  is,  they are sent to the terminal when
      they appear in the input.

1
আপনার উত্তর পরিষ্কার করুন।
adao7000

12

ব্যবহার করে দেখুন fileতারপর file -kতারপরdos2unix -ih

fileসাধারণত যথেষ্ট হবে। তবে কঠিন মামলার জন্য চেষ্টা করুন file -kবাdosunix -ih

নিচে বিস্তারিত.


চেষ্টা file -k

সংক্ষিপ্ত সংস্করণ: file -k somefile.txt আপনাকে বলবে।

  • এটি আউটপুট হবে with CRLF line endings ডস / উইন্ডোজ লাইন শেষের জন্য ।
  • এটি আউটপুট হবে with LF line endings ম্যাক লাইন শেষের জন্য ।
  • এবং লিনাক্স / ইউনিক্স লাইন "সিআর" এর জন্য এটি কেবল আউটপুট হবে text। (সুতরাং যদি এটি স্পষ্টভাবে কোনও ধরণের উল্লেখ না করে তবে এর সুস্পষ্ট line endingsঅর্থ: "সিআর লাইন সমাপ্তি" ))

দীর্ঘ সংস্করণ নীচে দেখুন।


বাস্তব বিশ্বের উদাহরণ: শংসাপত্রের এনকোডিং

আমাকে মাঝে মাঝে পিইএম শংসাপত্রের ফাইলগুলির জন্য এটি পরীক্ষা করতে হবে।

নিয়মিত ঝামেলা file হ'ল: কখনও কখনও এটি খুব স্মার্ট / খুব নির্দিষ্ট হওয়ার চেষ্টা করে।

আসুন একটু কুইজ চেষ্টা করি: আমি কিছু ফাইল পেয়েছি। এবং এই ফাইলগুলির মধ্যে একটির বিভিন্ন লাইন শেষ রয়েছে। কোনটি?

(যাইহোক, এটি আমার সাধারণ "শংসাপত্রের কাজ" ডিরেক্টরিগুলির মধ্যে একটির মতো লাগে))

আসুন নিয়মিত চেষ্টা করুন file:

$ file -- *
0.example.end.cer:         PEM certificate
0.example.end.key:         PEM RSA private key
1.example.int.cer:         PEM certificate
2.example.root.cer:        PEM certificate
example.opensslconfig.ini: ASCII text
example.req:               PEM certificate request

হাহ। এটি আমাকে লাইন শেষ বলে দিচ্ছে না। এবং আমি ইতিমধ্যে জানতাম যে সেগুলি ফাইল ছিল। এটা বলার জন্য আমার "ফাইল" দরকার ছিল না।

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

আপনি এই মত সুইচ dos2unixদিয়ে চেষ্টা --infoকরতে পারেন:

$ dos2unix --info -- *
  37       0       0  no_bom    text    0.example.end.cer
   0      27       0  no_bom    text    0.example.end.key
   0      28       0  no_bom    text    1.example.int.cer
   0      25       0  no_bom    text    2.example.root.cer
   0      35       0  no_bom    text    example.opensslconfig.ini
   0      19       0  no_bom    text    example.req

সুতরাং এটি আপনাকে জানায় যে: হ্যাঁ, "0.example.end.cer" অবশ্যই বিজোড় মানুষ হতে হবে। কিন্তু লাইন শেষ কি ধরণের আছে? না আপনি হৃদয় দ্বারা dos2unix আউটপুট ফরম্যাট জানেন? (আমি না।)

তবে ভাগ্যক্রমে এখানে --keep-going(বা -kসংক্ষেপে) বিকল্প রয়েছে file:

$ file --keep-going -- *
0.example.end.cer:         PEM certificate\012- , ASCII text, with CRLF line terminators\012- data
0.example.end.key:         PEM RSA private key\012- , ASCII text\012- data
1.example.int.cer:         PEM certificate\012- , ASCII text\012- data
2.example.root.cer:        PEM certificate\012- , ASCII text\012- data
example.opensslconfig.ini: ASCII text\012- data
example.req:               PEM certificate request\012- , ASCII text\012- data

অসাধারণ! এখন আমরা জানি যে আমাদের বিজোড় ফাইলটির ডস ( CRLF) লাইন শেষ হয়। (এবং অন্যান্য ফাইলগুলির ইউনিক্স ( LF) লাইন শেষ রয়েছে This এটি এই আউটপুটটিতে স্পষ্ট নয় imp এটি অন্তর্নিহিত It's file"নিয়মিত" পাঠ্য ফাইলটি কেবল প্রত্যাশা করে)

(আপনি যদি আমার স্মৃতিচারণ ভাগ করতে চান: "এল" "লিনাক্স" এবং "এলএফ" এর জন্য))

এখন আসুন অপরাধীকে রূপান্তর করুন এবং আবার চেষ্টা করুন:

$ dos2unix -- 0.example.end.cer

$ file --keep-going -- *
0.example.end.cer:         PEM certificate\012- , ASCII text\012- data
0.example.end.key:         PEM RSA private key\012- , ASCII text\012- data
1.example.int.cer:         PEM certificate\012- , ASCII text\012- data
2.example.root.cer:        PEM certificate\012- , ASCII text\012- data
example.opensslconfig.ini: ASCII text\012- data
example.req:               PEM certificate request\012- , ASCII text\012- data  

ভাল. এখন সমস্ত শংসাপত্রের ইউনিক্স লাইনের শেষ রয়েছে।

চেষ্টা dos2unix -ih

আমি উপরের উদাহরণটি লেখার সময় এটি জানতাম না:

আসলে দেখা যাচ্ছে যে ডস 2 ইউনিক্স আপনাকে একটি শিরোনাম লাইন দেবে যদি আপনি এর মতো -ih(সংক্ষিপ্ত --info=h) ব্যবহার করেন :

$ dos2unix -ih -- *
 DOS    UNIX     MAC  BOM       TXTBIN  FILE
   0      37       0  no_bom    text    0.example.end.cer
   0      27       0  no_bom    text    0.example.end.key
   0      28       0  no_bom    text    1.example.int.cer
   0      25       0  no_bom    text    2.example.root.cer
   0      35       0  no_bom    text    example.opensslconfig.ini
   0      19       0  no_bom    text    example.req

এবং অন্য একটি "প্রকৃতপক্ষে" মুহূর্ত: শিরোনাম ফর্ম্যাটটি মনে রাখা সত্যিই সহজ: এখানে দুটি স্মৃতিবিদ্যার কথা:

  1. এটি ডাম্বু (বাম থেকে ডান: ডসের জন্য ডি, ইউনিক্সের জন্য মি, ম্যাকের জন্য মি, বিওএমের জন্য বি)।
  2. এবং এছাড়াও: "DUM" হ'ল ডি, ইউ এবং এম এর বর্ণানুক্রমিক ক্রম মাত্র

আরও পড়া


1
এটি আউটপুট উত্পন্ন করে: Accounts.java: Java source, ASCII text\012-উইন্ডোজে মিনিটটিওয়াই
একা দাঁড়িয়ে

@ স্ট্যান্ডলোন: আকর্ষণীয়। "Igncr" নামক একটি বিকল্প সম্পর্কে আমি অদ্ভুত জিনিসগুলি পড়েছি - এবং আপনি যা বলছেন তা এ জাতীয় শোনাচ্ছে। তবে আপনি যা বর্ণনা করেছেন তা পুনরুত্পাদন করতে পারে না। (আমি ব্যাশ ভিতরে mintty যে গীত-জন্য-উইন্ডোজ, "Git সংস্করণ 2.24.0.windows.1" দিয়ে আসে ভিতরে চেষ্টা করে।)
StackzOfZtuff

এইচএম, আমি file -k Accounts.javaউইন্ডোতে উইন্ডোতেও আসে এমন টাকশালটির ভিতরে চেষ্টা করেছি , তবে আমার সংস্করণটি হলgit version 2.21.0.windows.1
একা দাঁড়িয়ে

আমার জন্য কাজ সমাধানcat -e file_to_test
একা দাঁড়ানো

9

আপনি xxdফাইলটির একটি হেক্স্স ডাম্প প্রদর্শন করতে এবং "0d0a" বা "0a" অক্ষরের জন্য শিকার করতে পারেন ।

আপনি cat -v <filename>@warriorpostman এর পরামর্শ অনুসারে ব্যবহার করতে পারেন ।


1
এটি আমার জন্য বিড়াল ভি 8.23 ​​এর সাথে কাজ করে। ইউনিক্স লাইনের শেষগুলি কোনও অতিরিক্ত তথ্য মুদ্রণ করবে না, তবে ডস লাইন সমাপ্তি একটি "^ এম" মুদ্রণ করবে।
ধনী

৮.২১ এর সাথে আমি যা চালিয়ে যাচ্ছি তা অবশ্যই হওয়া উচিত, আমি ইউনিক্স লাইনের শেষ ব্যবহার করছি given
neanderslob

5

todos filenameডস এন্ডিংগুলিতে fromdos filenameরূপান্তর করতে এবং ইউনিক্স লাইন এন্ডিংয়ে রূপান্তর করতে আপনি কমান্ডটি ব্যবহার করতে পারেন । উবুন্টুতে প্যাকেজটি ইনস্টল করতে টাইপ করুন sudo apt-get install tofrodos


5

আপনি vim -b filenameবাইনারি মোডে কোনও ফাইল সম্পাদনা করতে ব্যবহার করতে পারেন যা ক্যারেজ ফেরতের জন্য এম অক্ষর প্রদর্শন করবে এবং একটি নতুন লাইন এলএফ উপস্থিত থাকার ইঙ্গিত দেয় যা উইন্ডোজ সিআরএলএফ লাইন সমাপ্তি নির্দেশ করে। এলএফ দ্বারা আমি \nএবং সিআর বলতে চাইছি \r। মনে রাখবেন যে আপনি যখন -b বিকল্পটি ব্যবহার করেন তখন ফাইলটি সর্বদা ইউনিক্স মোডে [unix]স্থিতি রেখায় উল্লিখিত হিসাবে সম্পাদনা করা হয় , যার অর্থ আপনি যদি নতুন লাইন যুক্ত করেন তবে সেগুলি সিআরএলএফ দিয়ে নয়, এলএফ দিয়ে শেষ হবে। আপনি যদি সিআরএলএফ লাইন সমাপ্তি সহ কোনও ফাইলে -b ছাড়াই সাধারণ ভিম ব্যবহার [dos]করেন তবে আপনার স্থিতি রেখায় দেখানো উচিত এবং সন্নিবেশিত রেখাগুলির লাইনের শেষ হিসাবে সিআরএলএফ থাকবে। fileformatsসেটিংয়ের জন্য ভিএম ডকুমেন্টেশন জটিলতাগুলি ব্যাখ্যা করে।

এছাড়াও, নোটপ্যাড ++ উত্তরে মন্তব্য করার মতো পর্যাপ্ত পয়েন্ট আমার কাছে নেই, তবে আপনি যদি উইন্ডোজে নোটপ্যাড ++ ব্যবহার করেন, সিআর এবং এলএফ প্রদর্শন করতে ভিউ / শো সিম্বল / লাইন মেনু অফ শো শেষ ব্যবহার করুন use এই ক্ষেত্রে এলএফ প্রদর্শিত হয়, যখন ভিএমের জন্য এলএফ একটি নতুন লাইন দ্বারা নির্দেশিত হয়।


0

আমি আমার আউটপুট একটি পাঠ্য ফাইলে ফেলে দেই। আমি তারপরে এটি নোটপ্যাড ++ এ খুলি এবং তারপরে সমস্ত অক্ষরের বোতামটি দেখান। খুব মার্জিত না তবে এটি কাজ করে।


3
এই প্রশ্নটি লিনাক্স হিসাবে ট্যাগ হয়েছে এবং আমি নোটপ্যাড ++ লিনাক্সের জন্য মনে করি না। যদিও এটি উইন্ডোগুলির জন্য কাজ করা উচিত।
রিক স্মিথ

0

ভিম - সর্বদা উইন্ডোজের হিসাবে নতুন লাইনগুলি প্রদর্শন করুন ^M

আপনি যদি সবসময় উইন্ডোজকে নতুন ভিউ হিসাবে রেন্ডারে দেখতে চান ^Mতবে আপনার এই লাইনটি যুক্ত করতে পারেন .vimrc:

set ffs=unix

এটি আপনার ইউনিট ফাইল হিসাবে খোলার প্রতিটি ফাইলকে ভিমে ব্যাখ্যা করবে। যেহেতু ইউনিক্স ফাইলগুলিতে \nনিউলাইন চরিত্রটি রয়েছে তাই একটি উইন্ডোজ ফাইলের একটি নতুন লাইন অক্ষর যুক্ত ফাইলটি \r\nএখনও যথাযথভাবে রেন্ডার করবে (ধন্যবাদ ধন্যবাদ \n) তবে ^Mফাইলটির শেষে থাকবে (যা ভিএম \rঅক্ষরটি কীভাবে উপস্থাপন করে )।


ভিম - কখনও কখনও উইন্ডোজের নতুন লাইনগুলি দেখান

আপনি যদি প্রতি ফাইলের ভিত্তিতে সেট করতে পছন্দ করেন তবে :e ++ff=unixপ্রদত্ত ফাইল সম্পাদনা করার সময় আপনি এটি ব্যবহার করতে পারেন ।


ভিম - সর্বদা ফাইল টাইপ ( unixবনাম dos) দেখান

যদি আপনি চান যে ভিএমের নীচের লাইনটি সর্বদা প্রদর্শিত হয় যে আপনি কোন ফাইল টাইপটি সম্পাদনা করছেন (এবং আপনি ফাইল টাইপটিকে বাধ্যতামূলকভাবে সেট করেননি) আপনি নিজের statuslineসাথে যুক্ত করতে পারেন
set statusline+=\ %{&fileencoding?&fileencoding:&encoding}

আমার সম্পূর্ণ স্ট্যাটাসলাইন নীচে সরবরাহ করা হয়েছে। শুধু এটি আপনার যুক্ত করুন .vimrc

" Make statusline stay, otherwise alerts will hide it
set laststatus=2
set statusline=
set statusline+=%#PmenuSel#
set statusline+=%#LineNr#
" This says 'show filename and parent dir'
set statusline+=%{expand('%:p:h:t')}/%t
" This says 'show filename as would be read from the cwd'
" set statusline+=\ %f
set statusline+=%m\
set statusline+=%=
set statusline+=%#CursorColumn#
set statusline+=\ %y
set statusline+=\ %{&fileencoding?&fileencoding:&encoding}
set statusline+=\[%{&fileformat}\]
set statusline+=\ %p%%
set statusline+=\ %l:%c
set statusline+=\ 

এটি ভালো লেগেছে

.vim/vimrc\                                    [vim] utf-8[unix] 77% 315:6

আপনার ফাইলের নীচে


ভিম - কখনও কখনও ফাইল টাইপ ( unixবনাম dos) দেখান

আপনি যদি দেখতে চান যে আপনার কাছে কী ধরণের ফাইল রয়েছে, আপনি ব্যবহার করতে পারেন :set fileformat( আপনি ফাইল টাইপটি চাপিয়ে দিলে এটি কাজ করবে না)। এটি unixইউনিক্স ফাইল এবং dosউইন্ডোজের জন্য ফিরে আসবে ।

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