web-dev-qa-db-ja.com

ファイルの行末を判断する方法

Unixの行末を持っているはずのファイルがたくさんあります。私は、それらのいくつかがWindowsの行末を持っていることを強く疑っています。

私はただ走ることができることを知っています

フリップ-u
51
nwahmaet

Grepを使用できます

egrep -l $'\r'\$ *
28
stimms

file ツールを使用すると、行末のタイプがわかります。または、dos2unix -Uを使用することもできます。これは、最初に関係なく、すべてをUnixの行末に変換します。

69
Adam Rosenfield

以下の線に沿ったもの:

Perl -p -e 's[\r\n][WIN\n]; s[(?<!WIN)\n][UNIX\n]; s[\r][MAC\n];' FILENAME

ただし、その正規表現の一部では、洗練と片付けが必要になる場合があります。

これにより、各行の最後にWIN、MAC、またはUNIXを含むファイルが出力されます。ファイルがなんとなく恐ろしい混乱(または差分)であり、末尾が混在している場合に適しています。

14
joachim

これが最も安全な答えです。 Stimmsの回答はサブディレクトリとバイナリファイルを考慮しません

find . -type f -exec file {} \; | grep "CRLF" | awk -F ':' '{ print $1 }'
  • fileを使用して、ファイルの種類を見つけます。 CRLFを使用する場合、ウィンドウは文字を返します。 fileの出力は:で区切られ、最初のフィールドはファイルのパスです。
4
Bryce Guinta

Unixは1バイトの0x0A(LineFeed)を使用し、Windowsは2バイトの0x0D 0x0A(復帰、改行)を使用します。

0x0Dが表示されない場合は、Unixである可能性が非常に高いです。 0x0D 0x0Aペアが表示される場合、MSDOSである可能性が非常に高くなります。

2
Adam Davis

Windowsは行末にchar 13と10を使用し、そのうちの1つだけをunixします(どちらを覚えていないのか)。したがって、char 13と10をchar 13または10(unixを使用するもの)に置き換えることができます。

0
TcKs

どのファイルがWindowsの行末記号(0x0D 0x0Aまたは\r \n)、そのファイルで何をしますか?おそらく、それらをUnixの行末(0x0Aまたは\n)。 sedユーティリティを使用して、Windows行末のファイルをUnix行末に変換できます。コマンドを使用します。

$> sed -i 's/\r//' my_file_with_win_line_endings.txt

次のようにスクリプトに入れることができます。

#!/bin/bash

function travers()
{
    for file in $(ls); do
        if [ -f "${file}" ]; then
            sed -i 's/\r//' "${file}"
        Elif [ -d "${file}" ]; then
            cd "${file}"
            travers
            cd ..
        fi
    done
}

travers

ルートディレクトリからファイルを実行すると、最後にすべてのファイルがUnixの行末であることが確実になります。

0
1ac0