Windowsでは、Unix ^MでFTPの後に追加されたスクリプトから特殊モードを削除します。

Windowsでは、Unix ^MでFTPの後に追加されたスクリプトから特殊モードを削除します。

FTPを使用してWindowsファイルをUnixシステムに送信し、^M改行文字を必要とするファイルを追加しましたが、単に削除したいと思いました。

私が持っているオプションの1つは、dos2unixコマンドを実行することです。

そのようなパターンを削除する他の方法(sedコマンドなど)を提案できる人はいますか?

答え1

Windows 行末は、2 つの文字シーケンス CR、LF で構成されます。 CRはキャリッジリターン文字であり、時にはなどで\r表されます\015^MUnixの行末はLF文字です。

すべてのUnixバリアントに存在する標準ユーティリティのみを使用してWindows行末をUnix行末に変換するには、次のようにします。tr便利です。

tr -d '\r' <thefile >thefile.new && mv thefile.new thefile

ファイルにすでにUnix行の終わりがある場合、その内容は変更されません。

現在のディレクトリに変換するファイルが多い場合は、ループを使用できます。名前が終わるファイルがないとします.new

for x in *; do
  tr -d '\r' <"$x" >"$x.new" && mv "$x.new" "$x"
done

Linux(一部の組み込みLinuxシステムを除く)またはCygwinでは、次のものを使用できます。sed。ファイルを内部で編集するオプションは、-iこれらのシステムにのみ適用されます。 CR文字表現\rはより一般的ですが、普遍的ではありません。

sed -i -e 's/\r//g' thefile

答え2

DOS2 Unix:

sed -i -r -e 's/\r$//' file

UNIX2DOS:

sed -i -r -e 's/$/\r/' file

答え3

sed -i -r -e 's/\r$//' file「dos2unix」の場合よりも優れています。sed -i -e 's/\r//g' file

後者の場合、古典的なMacスタイルファイル(改行文字が '\ r'の場合)で実行すると、新しいファイルはUnixスタイルではなく改行文字もまったくありません。すべてがソートされます。

編集:もう一度コメントで述べたように、sed 's/^M//g' file^記号は行の先頭のsedコードなので、行の先頭のすべてのMを削除するので、sedを使用することをお勧めします。前にMのみの複数行のテキストファイルを作成し、そのsedコマンドを使用すると改行以外には何も出力されませんでした。

答え4

使用sed:

sed 's/^M//g' filename > newfilename

関連情報