ম্যাক থেকে উইন্ডোতে নতুন লাইন বিন্যাস রূপান্তর করা


133

আমার একটি রূপান্তর ইউটিলিটি / স্ক্রিপ্ট দরকার যা ম্যাকের উপরে নির্মিত একটি .sql ডাম্প ফাইলটিকে উইন্ডোজের পাঠ্যযোগ্যে রূপান্তরিত করে। এটি আমার এখানে যে সমস্যা ছিল তার ধারাবাহিকতা । সমস্যাটি টেক্সট ফাইলগুলিতে নতুন লাইন বিন্যাসের সাথে রয়েছে বলে মনে হচ্ছে, তবে রূপান্তরটি করার কোনও সরঞ্জাম আমি খুঁজে পাচ্ছি না ...


3
শিল্প শক্তির সাথে কোনও সন্তোষজনক সমাধান না পেয়ে আমি তৈরি একটি জেনেরিক সরঞ্জাম github.com/mdolidon/endlines
ম্যাথিয়াস ডোলিডন

উত্তর:


134

উইন্ডোজ নতুন লাইনের জন্য carriage return+ line feedব্যবহার করে:

\r\n

ইউনিক্স কেবল Line feedনিউলাইনের জন্য ব্যবহার করে :

\n

পরিশেষে, সহজভাবে প্রতিটি occurence প্রতিস্থাপন \nদ্বারা \r\n
উভয়ই unix2dosএবং dos2unixম্যাক ওএসএক্সে ডিফল্টরূপে উপলব্ধ নয়।
ভাগ্যক্রমে, আপনি খালি ব্যবহার করতে Perlবা sedকাজটি করতে পারেন:

sed -e 's/$/\r/' inputfile > outputfile                # UNIX to DOS  (adding CRs)
sed -e 's/\r$//' inputfile > outputfile                # DOS  to UNIX (removing CRs)
perl -pe 's/\r\n|\n|\r/\r\n/g' inputfile > outputfile  # Convert to DOS
perl -pe 's/\r\n|\n|\r/\n/g'   inputfile > outputfile  # Convert to UNIX
perl -pe 's/\r\n|\n|\r/\r/g'   inputfile > outputfile  # Convert to old Mac

কোড স্নিপেট থেকে:
http://en.wikedia.org/wiki/Newline#Conversion_utilities


36
sedডস থেকে ইউনিক্স জন্য কমান্ড উপর OS X এর লায়ন আমার জন্য কাজ করে না - এটা শুধু প্রতিটি লাইনে শেষে টেক্সট "r" বা সন্নিবিষ্ট করে। perlকমান্ড যদিও কাজ করে।
এরগওয়ান

7
ওএসএক্স সিডের পুরানো সংস্করণ ব্যবহার করে। আমি ওএসএক্সের জন্য হোমব্রু ব্যবহার করি এবং gnu-sed ইনস্টল করি। আপনি "সেড" এর পরিবর্তে "জিসিড" কমান্ডটি ব্যবহার করেন। ওই কাজগুলো.
জন

2
পরিবর্তে ডস 2 ইউনিক্স এবং ইউনিক্স 2ডোস প্যাকেজগুলি পেতে হোমব্রিউ ব্যবহার করুন।
প্রত্যুষ 20'15

10
ওএস এক্স ইয়োসেমাইটে এখনও একই সমস্যা রয়েছে sed, তবে আপনি হোমব্রিউ, gnu-sed বা unix2dos ইনস্টল না করেই এটিকে ঘিরে কাজ করতে পারেন: ব্যবহার করুন sed -e 's/$/^M/' inputfile > outputfile, যেখানে ^Mকমান্ড লাইনে একটি নিয়ন্ত্রণ চরিত্র উত্পাদিত হয় Ctrl+V Ctrl+M
LarsH

2
ম্যাক ওএসের জন্য আরেকটি কার্যকারিতা (10.13.6 হাই সিয়েরায় পরীক্ষিত): সেড $কমান্ড সম্বলিত একক উদ্ধৃতিটির আগে একটি স্থান রাখুন : sed $'s/\r$//'ব্যাখ্যা: $'...'স্ট্রিংগুলিতে ব্যাকস্ল্যাশ- এস্কেপড ডেকোড করে। বিস্তারিত জানার জন্য gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html দেখুন ।
jcsahnwaldt মনিকা

127

এটি অ্যানের উত্তরের একটি উন্নত সংস্করণ - আপনি যদি পার্ল ব্যবহার করেন তবে নতুন ফাইল তৈরির পরিবর্তে আপনি 'ইন-প্লেস' ফাইলটিতে সম্পাদনাটি করতে পারেন:

perl -pi -e 's/\r\n|\n|\r/\r\n/g' file-to-convert  # Convert to DOS
perl -pi -e 's/\r\n|\n|\r/\n/g'   file-to-convert  # Convert to UNIX

5
এই স্ক্রিপ্টগুলির সম্পর্কে দুর্দান্ত বিষয়টি হ'ল এগুলি নিয়মিত প্রকাশের সাথে দেখায় যে শেষ-অব-লাইন রূপান্তরটি যে কোনও কিছু থেকে শুরু করে উভয় বিন্যাসে রূপান্তরিত হওয়া দরকার।
পিবিআর

উইন্ডোজ সিস্টেমে নির্দিষ্ট সাইগউইন / গিট বাশ ইনস্টলসে এটি সম্পর্কে সতর্কতা অবলম্বন করুন। এটি আপনাকে দিতে পারে Can't do inplace edit on file: Permission denied.এবং ফাইলটি মুছে ফেলতে পারে । পরিবর্তে অন্যান্য ইউটিলিটিগুলি অনুসন্ধান করুন।
ডেনিস

"ইউনিক্সে রূপান্তর করুন" দেখানোর জন্য বিশাল ধন্যবাদ। আমি সেই পথে ছিলাম এবং আপনার দ্বিগুণ উত্তর আমাকে সহায়তা করেছিল এবং আমার উত্সাহ পেয়েছে।
নাল

112

আপনার সাথে unix2dos ইনস্টল করতে পারেন Homebrew

brew install unix2dos

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

unix2dos file-to-convert

আপনি ডস ফাইলগুলি ইউনিক্সে রূপান্তর করতে পারেন:

dos2unix file-to-convert

9
এখনই যে কেউ আসে তার জন্য এখন হোমব্রু সূত্র বলা হয় dos2unix। আপনি চাইবেন brew install dos2unix
জেফ 19

13
আসলে, হয় হয় brew install unix2dosবা brew install dos2unixসূক্ষ্ম কাজ। তারা একই প্যাকেজ ইনস্টল। যে নামটি আপনার সাথে কথা বলে তা ব্যবহার করুন :)
স্টিভেন হর্লস্টন

2
অথবা সঙ্গে Macports : port install dos2unix
ফ্যাং

16

আপনি সম্ভবত ইউনিক্স 2 ডস চান :

$ man unix2dos

NAME
       dos2unix - DOS/MAC to UNIX and vice versa text file format converter

SYNOPSIS
           dos2unix [options] [-c CONVMODE] [-o FILE ...] [-n INFILE OUTFILE ...]
           unix2dos [options] [-c CONVMODE] [-o FILE ...] [-n INFILE OUTFILE ...]

DESCRIPTION
       The Dos2unix package includes utilities "dos2unix" and "unix2dos" to convert plain text files in DOS or MAC format to UNIX format and vice versa.  Binary files and non-
       regular files, such as soft links, are automatically skipped, unless conversion is forced.

       Dos2unix has a few conversion modes similar to dos2unix under SunOS/Solaris.

       In DOS/Windows text files line endings exist out of a combination of two characters: a Carriage Return (CR) followed by a Line Feed (LF).  In Unix text files line
       endings exists out of a single Newline character which is equal to a DOS Line Feed (LF) character.  In Mac text files, prior to Mac OS X, line endings exist out of a
       single Carriage Return character. Mac OS X is Unix based and has the same line endings as Unix.

আপনি হয় সাইগউইনunix2dos ব্যবহার করে আপনার ডস / উইন্ডোজ মেশিনে অথবা ম্যাকপোর্টগুলি ব্যবহার করে আপনার ম্যাকে চালাতে পারেন ।


unix2dos / ডস 2 ইউনিক্স আমার ম্যাকের সাথে বিদ্যমান নেই এবং সেগুলি ইনস্টল করার জন্য আমি কোনও জায়গা পাইনি any আপনি কি কোনও জানেন?
ইয়ারিন

@ এমগাড্ডা: +১ - হ্যাঁ, আমি এখন থেকে কিছুক্ষণ আগে ম্যাকপোর্টস থেকে হোমব্রিউতে সরিয়েছি এবং পিছনে ফিরে তাকাতে পারি নি।
পল আর

15

শুধু trমুছুন:

tr -d "\r" <infile.txt >outfile.txt

1
চেষ্টা করা পার্ল এবং সেড, কাজ করেনি (আমি এটি বের করতে পারতাম, চেষ্টা করার মতো নয়)। এটি দুর্দান্ত কাজ করেছে।
এলোমেলো ইনসানো

পাইথন (এবং মিলছে না wc -l) ব্যবহার করে পড়ার সাথে সাথে আমি বিবিইডিটের লাইন নম্বরগুলিতে লাইনের সংখ্যার সাথে মেলে না এমন এটি প্রথম সমাধান ছিল ।
ড্যারিল স্পিজিটর

1
এটি লাইন ব্রেকগুলির সমস্তই মুছে ফেলে আমার আসলে এখনও লাইন ব্রেক হওয়া দরকার তবে with n
ইউজারওয়াই

" hints.macworld.com/article.php?story=20031018164326986 " এ কীভাবে trবিভিন্ন রূপান্তর সম্পাদন করতে কমান্ডটি ব্যবহার করতে হয় সে সম্পর্কেও ভাল লেখার ব্যবস্থা রয়েছে । ব্যবহারের hexdumpবা অনুরূপ খুঁজে বের করতে ঠিক কি ধরণের শেষ অফ লাইন প্রথার এখন ফাইলটি ব্যবহার করা হয়।
মাইক রবিনসন

6
  1. হোমব্রু দিয়ে ডস 2 ইউনিক্স ইনস্টল করুন
  2. find ./ -type f -exec dos2unix {} \;বর্তমান ফোল্ডারের মধ্যে সমস্ত লাইন-এন্ডিংকে পুনরাবৃত্তভাবে রূপান্তর করতে চালান

2

vimইউনিক্স থেকে ডস ফর্ম্যাটে ফাইল রূপান্তর করতে পারে। উদাহরণ স্বরূপ:

vim hello.txt <<EOF
:set fileformat=dos
:wq
EOF

2

নীচে স্যানিটি পরীক্ষা করার পাশাপাশি উপরের উত্তরের উপর ভিত্তি করে একটি সম্পূর্ণ স্ক্রিপ্ট রয়েছে এবং ম্যাক ওএস এক্সে কাজ করে এবং অন্যান্য লিনাক্স / ইউনিক্স সিস্টেমেও কাজ করা উচিত (যদিও এটি পরীক্ষা করা হয়নি)।

#!/bin/bash

# http://stackoverflow.com/questions/6373888/converting-newline-formatting-from-mac-to-windows

# =============================================================================
# =
# = FIXTEXT.SH by ECJB
# =
# = USAGE:  SCRIPT [ MODE ] FILENAME
# =
# = MODE is one of unix2dos, dos2unix, tounix, todos, tomac
# = FILENAME is modified in-place
# = If SCRIPT is one of the modes (with or without .sh extension), then MODE
# =   can be omitted - it is inferred from the script name.
# = The script does use the file command to test if it is a text file or not,
# =   but this is not a guarantee.
# =
# =============================================================================

clear
script="$0"
modes="unix2dos dos2unix todos tounix tomac"

usage() {
    echo "USAGE:  $script [ mode ] filename"
    echo
    echo "MODE is one of:"
    echo $modes
    echo "NOTE:  The tomac mode is intended for old Mac OS versions and should not be"
    echo "used without good reason."
    echo
    echo "The file is modified in-place so there is no output filename."
    echo "USE AT YOUR OWN RISK."
    echo
    echo "The script does try to check if it's a binary or text file for sanity, but"
    echo "this is not guaranteed."
    echo
    echo "Symbolic links to this script may use the above names and be recognized as"
    echo "mode operators."
    echo
    echo "Press RETURN to exit."
    read answer
    exit
}

# -- Look for the mode as the scriptname
mode="`basename "$0" .sh`"
fname="$1"

# -- If 2 arguments use as mode and filename
if [ ! -z "$2" ] ; then mode="$1"; fname="$2"; fi

# -- Check there are 1 or 2 arguments or print usage.
if [ ! -z "$3" -o -z "$1" ] ; then usage; fi

# -- Check if the mode found is valid.
validmode=no
for checkmode in $modes; do if [ $mode = $checkmode ] ; then validmode=yes; fi; done
# -- If not a valid mode, abort.
if [ $validmode = no ] ; then echo Invalid mode $mode...aborting.; echo; usage; fi

# -- If the file doesn't exist, abort.
if [ ! -e "$fname" ] ; then echo Input file $fname does not exist...aborting.; echo; usage; fi

# -- If the OS thinks it's a binary file, abort, displaying file information.
if [ -z "`file "$fname" | grep text`" ] ; then echo Input file $fname may be a binary file...aborting.; echo; file "$fname"; echo; usage; fi

# -- Do the in-place conversion.
case "$mode" in
#   unix2dos ) # sed does not behave on Mac - replace w/ "todos" and "tounix"
#       # Plus, these variants are more universal and assume less.
#       sed -e 's/$/\r/' -i '' "$fname"             # UNIX to DOS  (adding CRs)
#       ;;
#   dos2unix )
#       sed -e 's/\r$//' -i '' "$fname"             # DOS  to UNIX (removing CRs)
#           ;;
    "unix2dos" | "todos" )
        perl -pi -e 's/\r\n|\n|\r/\r\n/g' "$fname"  # Convert to DOS
        ;;
    "dos2unix" | "tounix" )
        perl -pi -e 's/\r\n|\n|\r/\n/g'   "$fname"  # Convert to UNIX
        ;;
    "tomac" )
        perl -pi -e 's/\r\n|\n|\r/\r/g'   "$fname"  # Convert to old Mac
        ;;
    * ) # -- Not strictly needed since mode is checked first.
        echo Invalid mode $mode...aborting.; echo; usage
        ;;
esac

# -- Display result.
if [ "$?" = "0" ] ; then echo "File $fname updated with mode $mode."; else echo "Conversion failed return code $?."; echo; usage; fi

1

সৌন্দর্যে ডেভি শ্মিটস এর ওয়েবলগ : সৌজন্যে এখানে আমার পক্ষে খুব সহজ পদ্ধিতি রয়েছে

cat foo | col -b > foo2

যেখানে foo হ'ল সেই ফাইলটি যেখানে লাইনের শেষে কন্ট্রোল + এম অক্ষর থাকে এবং আপনি যে নতুন ফাইলটি তৈরি করছেন সেটি foo2 করে।


0

Yosemite OSX এ, এই আদেশটি ব্যবহার করুন:

sed -e 's/^M$//' -i '' filename

যেখানে ^Mক্রম টিপে অর্জিত হয় Ctrl+ + Vতারপর Enter


এছাড়াও মনে রাখবেন sed নেই বুঝতে ব্যাকস্ল্যাশ-পালাতে যেমন \rএবং `` \ n` এবং সেইজন্য এছাড়াও প্রতিকল্পন এই ব্যবহার করতে পারেন। অক্ষরটি (বা অন্য কোনও) উল্লেখ করার জন্য আপনাকে আসলে একটি আক্ষরিক নিয়ন্ত্রণ-এম ইনপুট করতে হবে না। এই ধরণের কোনও ধরণের রূপান্তর করার জন্য sed(এবং -i) ব্যবহারের নীতিটি খুব ভাল, কারণ এর বিপরীতে , আপনি "একবারে একটি চরিত্র" -তে সীমাবদ্ধ নন। tr
মাইক রবিনসন

0

অ্যান এবং জোসেফএইচের জবাবগুলি প্রসারিত করে, একটি ছোট পার্ল স্ক্রিপ্টে পার্ল ব্যবহার করে, যেহেতু আমি খুব সময় পার্ল-ওয়ান-লাইনার টাইপ করতে খুব অলস।
উদাহরণস্বরূপ "unix2dos.pl" নামে একটি ফাইল তৈরি করুন এবং এটি আপনার পথে একটি ডিরেক্টরিতে রেখে দিন। 2 টি লাইন ধারণ করতে ফাইলটি সম্পাদনা করুন:

#!/usr/bin/perl -wpi
s/\n|\r\n/\r\n/g;

আপনার সিস্টেমে "যা পার্ল" রিটার্ন করে "/ ইউএসআর / বিন / পার্ল" তা ধরে নিচ্ছেন। ফাইলটি এক্সিকিউটেবল করুন (chmod u + x unix2dos.pl)।

উদাহরণ:
$ প্রতিধ্বনি "হ্যালো"> xxx
$ od -c xxx (ফাইলটি একটি এনএল দ্বারা শেষ হয় তা পরীক্ষা করে)
0000000 হ্যালো \ n

$ unix2dos.pl xxx
$ od -c xxx (এটি এখন সিআরএফএফতে শেষ হয় তা পরীক্ষা করে)
0000000 হ্যালো \ r \ n


0

বাম প্যানেলে 9 এক্সকোডে আপনার প্রকল্পটি ন্যাভিগেটরে খুলুন / চয়ন করুন । যদি ফাইলটি না থাকে তবে ড্রাগ ড্রাগ-এটিকে প্রজেক্ট ন্যাভিগেটরে ফেলে দিন

ডান প্যানেলে তে পাঠ্য সেটিংসের পরিবর্তন লাইন Endings করতে উইন্ডোজ (CRLF)

এক্সকোড স্ক্রিনড্যাম্পএক্সকোড থেকে screendump

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