テキストファイルを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
関連: