「読み込み中に-r」から「\r」を内容なしとして扱う

「読み込み中に-r」から「\r」を内容なしとして扱う

テキストファイルを1行ずつ読み取るコード行があります。

テキストファイルはWindowsユーザーが作成する場合もあり、Unixユーザーが作成する場合もあります。だから時には行の終わりが見えたり\r\n、時にはただ見えたりします\n

私のスクリプトは両方のケースを処理し、改行文字が、または、であるかどうか\rにかかわらず\n\r\n各行に個別に到達したいと思います\n\r

while read -r textFileLines; do ... something ...; done < text_file.txt

このコード働く\n\r各行の末尾に(LF CR)がありますが、いいえ私が\r\n行末にいるとき!

テスト

  • 以下を使用して新しいテキストファイルを作成します。Notepad++ v7.5.4

    ここに画像の説明を入力してください。

  • while read -r LINE; do echo "$LINE"; done < /cygdrive/d/test_text.txt

  • ターミナル出力:

    first_line
    second_line
    third_string
    

fourth_outputこの行が表示されないのはなぜですか?

ベストアンサー1

一部のファイルはDOSテキストファイルで、他のファイルはUnixテキストファイルの場合、スクリプトは次の方法ですべてのデータを渡すことができますdos2unix

dos2unix <filename |
while IFS= read stuff; do
   # do things with "$stuff"
done 

その結果、Unix テキストファイルは変更されません。

Macの改行問題をさらに処理するために、信じるできなければならない

dos2unix <filename | mac2unix |
while IFS= read stuff; do
   # do things with "$stuff"
done 

最後の行はread終了せず、まったく行ではないため、ループによって出力されません。

ファイルの最後の行に終了改行文字がないかどうかを検出し、そうでない場合は次の場所に追加しますbash

if [ "$( tail -c 1 filename )" != $'\n' ]; then
    printf '\n' >>filename
fi

関連:

おすすめ記事