回答:
Windowsは改行にcarriage return
+ line feed
を使用します。
\r\n
UnixはLine feed
改行にのみ使用します。
\n
結論としては、単にのすべての出現置き換える\n
ことによってを\r\n
。
両方ともunix2dos
、dos2unix
Mac OSXではデフォルトでは使用できません。
幸いなことに、あなたは単に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.wikipedia.org/wiki/Newline#Conversion_utilities
sed
UNIXからDOSへのコマンドは、OS X Lionでは機能しません-各行の終わりに「r」というテキストを挿入するだけです。perl
コマンドはかかわらず動作します。
sed
が、あなたは自作、GNU-のsedやunix2dosといったインストールすることなく、それを回避することができます使用sed -e 's/$/^M/' inputfile > outputfile
、^M
制御文字を経由して、コマンドラインで製造されるがCtrl+V Ctrl+M
。
$
sedコマンドを含む単一引用符の前にaを配置sed $'s/\r$//'
します:説明:bashは、$'...'
文字列内のバックスラッシュエスケープをデコードします。詳細については、gnu.org / software / bash / manual / html_node / ANSI_002dC-Quoting.htmlをご覧ください。
これは、Anneの回答の改良版です。perlを使用している場合は、新しいファイルを生成するのではなく、「インプレース」でファイルを編集できます。
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
Can't do inplace edit on file: Permission denied.
、および削除ファイルを。代わりに他のユーティリティを調べてください。
あなたはHomebrewで unix2dosをインストールできます
brew install unix2dos
次に、これを行うことができます:
unix2dos file-to-convert
dosファイルをunixに変換することもできます。
dos2unix file-to-convert
dos2unix
。あなたがしたいでしょうbrew install dos2unix
。
brew install unix2dos
かがbrew install dos2unix
正常に動作します。彼らは同じパッケージをインストールします。
おそらくunix2dosが必要です:
$ 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.
cygwinunix2dos
を使用してDOS / Windowsマシンで実行するか、MacPortsを使用してMacで実行できます。
tr
削除してください:
tr -d "\r" <infile.txt >outfile.txt
wc -l
)ことを発見した最初の解決策でした。
tr
コマンドを使用してさまざまな変換を実行する方法についての説明もあります。使用hexdump
やソートの行末規則は、現在のファイルで使用されている正確に何を見つけるに似て。
以下は、上記の回答に基づく健全性チェックに基づく完全なスクリプトで、Mac OS Xで動作し、他のLinux / Unixシステムでも動作するはずです(ただし、これはテストされていません)。
#!/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
Davy Schmeitsのウェブログの厚意により、私にとって非常に効果的な、非常にシンプルなアプローチを以下に示します。
cat foo | col -b > foo2
ここで、fooは行末にControl + M文字があるファイルで、foo2は作成する新しいファイルです。
Yosemite OSXでは、次のコマンドを使用します。
sed -e 's/^M$//' -i '' filename
ここで、^M
シーケンスはCtrl+ Vを押してからEnter。
sed
は\r
`` \ n` などのバックスラッシュエスケープを理解しているため、これらを置換で使用することもできます。実際には、その文字(またはその他)を参照するためにリテラルcontrol-Mを入力する必要はありません。使用する原理sed
(と-i
行うために)任意のとは違って、ため、この種の変換の一種は、非常に良いものですtr
、あなたがそれらに限定されない「一度に一つの文字。」
短いperlスクリプトでperlを使用して、AnneとJosephHの答えを拡張します。私は非常に時間をかけてperl-one-linerを入力するのが面倒だからです。
「unix2dos.pl」などの名前のファイルを作成し、パスのディレクトリに配置します。ファイルを編集して2行を含めます。
#!/usr/bin/perl -wpi
s/\n|\r\n/\r\n/g;
「which perl」がシステム上で「/ usr / bin / perl」を返すと仮定します。ファイルを実行可能にします(chmod u + x unix2dos.pl)。
例:
$ echo "hello"> xxx
$ od -c xxx(ファイルの末尾がnlであることを確認)
0000000 hello \ n
$ unix2dos.pl xxx
$ od -c xxx(cr lfで終了することを確認)
0000000 hello \ r \ n
Xcode 9の左側のパネルで、プロジェクトナビゲーターでファイルを開く/選択します。ファイルが存在しない場合は、ドラッグアンドドロップでプロジェクトナビゲーターに挿入します。
右側のパネルの検索でテキスト設定と変更行末までのWindows(CRLF) 。