助け合いフォーラム
LinuC Lv1-101(Ver10.0)
問題ID : 14910
問題を開く
改行コードがCRLFのテキストファイル crlf.txt をLinuxで正しく扱えるようにしたい。適切なコマンドはどれか(2つ選択)
正解
tr -d '\r' < crlf.txt > linux.txt
cat crlf.txt | tr -d '\r' > linux.txt
解説
コンピュータ上でテキストファイルを扱う際には、改行コードという制御符号について意識する必要があります。OSの改行コードと異なる改行コードのテキストファイルを読み込むと、正しく改行されなかったり、不正な制御コードの付いたファイルだと認識されたりします。
多くのシステムではキャリッジリターン(Carriage Return: CR、\r(16進数で0D))とラインフィード(Line feed: LF、\n(16進数で0A))を使って改行を表します。
改行コードと代表的なOSの組み合わせは以下のとおりです。
・CRLF(\r\n):Windows
・LF(\n):Unix OS(Linux, Mac OS Xなど)
・CR(\r):古いMacOS(バージョン9まで)
上記の通りWindowsとLinuxでは改行コードが異なるため、テキストファイルの扱いが問題になる場合があります。CRLF(\r\n)からCR(\r)を取り除くことでLinuxの認識できる改行コード:LF(\n)のみにでき、正しく扱うことができるようになります。
この設問ではtrコマンドを使っています。trコマンドは指定した文字を変換・削除するコマンドです。
trコマンドの書式と主なオプションは以下のとおりです。
tr [オプション] [文字列1 [文字列2]]

オプションを指定しない場合は、文字列1を文字列2に変換します。
なお、trコマンドは変換対象を標準入力からのみ受け付けます。つまり、変換・削除したい文字列が記載されているファイルをコマンドの引数として指定することが出来ません。そのため、以下のようにパイプ(|)やリダイレクト(<)を使用してファイルを指定します。
cat ファイル名 | tr [オプション] [文字列1 [文字列2]]
または
tr [オプション] [文字列1 [文字列2]] < ファイル名
例)「ping.txt」ファイルの「PINGT」を「pingt」に変換する場合

よって正解は
・tr -d '\r' < crlf.txt > linux.txt
・cat crlf.txt | tr -d '\r' > linux.txt
です
その他の選択肢については以下の通りです。
・tr -d '\n' < crlf.txt > linux.txt
・cat crlf.txt | tr -d '\n' > linux.txt
LF(\n)を除去しているので誤りです。
・tr '\r' '' < crlf.txt > linux.txt
trコマンドの第2引数が未指定のため誤りです。オプションを指定せず、第2引数に文字が指定されていないと以下のエラーが表示されます。
多くのシステムではキャリッジリターン(Carriage Return: CR、\r(16進数で0D))とラインフィード(Line feed: LF、\n(16進数で0A))を使って改行を表します。
改行コードと代表的なOSの組み合わせは以下のとおりです。
・CRLF(\r\n):Windows
・LF(\n):Unix OS(Linux, Mac OS Xなど)
・CR(\r):古いMacOS(バージョン9まで)
上記の通りWindowsとLinuxでは改行コードが異なるため、テキストファイルの扱いが問題になる場合があります。CRLF(\r\n)からCR(\r)を取り除くことでLinuxの認識できる改行コード:LF(\n)のみにでき、正しく扱うことができるようになります。
この設問ではtrコマンドを使っています。trコマンドは指定した文字を変換・削除するコマンドです。
trコマンドの書式と主なオプションは以下のとおりです。
tr [オプション] [文字列1 [文字列2]]

オプションを指定しない場合は、文字列1を文字列2に変換します。
なお、trコマンドは変換対象を標準入力からのみ受け付けます。つまり、変換・削除したい文字列が記載されているファイルをコマンドの引数として指定することが出来ません。そのため、以下のようにパイプ(|)やリダイレクト(<)を使用してファイルを指定します。
cat ファイル名 | tr [オプション] [文字列1 [文字列2]]
または
tr [オプション] [文字列1 [文字列2]] < ファイル名
例)「ping.txt」ファイルの「PINGT」を「pingt」に変換する場合

よって正解は
・tr -d '\r' < crlf.txt > linux.txt
・cat crlf.txt | tr -d '\r' > linux.txt
です
その他の選択肢については以下の通りです。
・tr -d '\n' < crlf.txt > linux.txt
・cat crlf.txt | tr -d '\n' > linux.txt
LF(\n)を除去しているので誤りです。
・tr '\r' '' < crlf.txt > linux.txt
trコマンドの第2引数が未指定のため誤りです。オプションを指定せず、第2引数に文字が指定されていないと以下のエラーが表示されます。
参考
コンピュータ上でテキストファイルを扱う際には、改行コードという制御コードについて意識する必要があります。OSの改行コードと異なる改行コードのテキストファイルを読み込むと、正しく改行されなかったり、不正な制御コードの付いたファイルだと認識されたりします。
多くのシステムではキャリッジリターン(Carriage Return: CR、\r(16進数で0D))とラインフィード(Line feed: LF、\n(16進数で0A))を使って改行を表します。
改行コードと代表的なOSの組み合わせは以下のとおりです。
・CRLF(\r\n):Windows
・LF(\n):Unix OS(Linux, Mac OS Xなど)
・CR(\r):古いMacOS(バージョン9まで)
上記の通りWindowsとLinuxでは改行コードが異なるため、テキストファイルの扱いが問題になる場合があります。
例えばWindowsのメモ帳で以下の様なユーザーIDを表示させるシェルスクリプトを作成、userid.shという名前で保存し、改行コードの変換などを行わずLinux側に送信してみます。

Linux側でこのシェルスクリプトを実行すると、Windowsの改行コードCRLFのままのファイルのため、LF(\n)の直前のCR(\r)が不正な文字と解釈され、以下の通りエラーになります。

CRが本当に存在するか、実行したファイルを確認してみます。改行コードは制御コードでありcatコマンドで表示できないため、odコマンドでファイルの中を確認します。

改行の位置に\r\n(0d 0a)が存在することがわかります。こういった場合、CR(\r)を取り除くことでLinuxの改行コード:LF(\n)のみにでき、正しく扱うことができるようになります。
例として、trコマンドを使ってCR(\r)を取り除いてみます。

ファイルサイズが、取り除かれたCR(\r)の数(行数)分の7バイト減っていることがわかります。実際にCR(\r)がなくなっているか、上記同様odコマンドで確認してみます。

改行の位置にあったCR(\r)がなくなり、LF(\n)のみになっていることがわかります。不要な改行コードがなくなったので、シェルスクリプトも正常に実行されるようになります。
多くのシステムではキャリッジリターン(Carriage Return: CR、\r(16進数で0D))とラインフィード(Line feed: LF、\n(16進数で0A))を使って改行を表します。
改行コードと代表的なOSの組み合わせは以下のとおりです。
・CRLF(\r\n):Windows
・LF(\n):Unix OS(Linux, Mac OS Xなど)
・CR(\r):古いMacOS(バージョン9まで)
上記の通りWindowsとLinuxでは改行コードが異なるため、テキストファイルの扱いが問題になる場合があります。
例えばWindowsのメモ帳で以下の様なユーザーIDを表示させるシェルスクリプトを作成、userid.shという名前で保存し、改行コードの変換などを行わずLinux側に送信してみます。

Linux側でこのシェルスクリプトを実行すると、Windowsの改行コードCRLFのままのファイルのため、LF(\n)の直前のCR(\r)が不正な文字と解釈され、以下の通りエラーになります。

CRが本当に存在するか、実行したファイルを確認してみます。改行コードは制御コードでありcatコマンドで表示できないため、odコマンドでファイルの中を確認します。

改行の位置に\r\n(0d 0a)が存在することがわかります。こういった場合、CR(\r)を取り除くことでLinuxの改行コード:LF(\n)のみにでき、正しく扱うことができるようになります。
例として、trコマンドを使ってCR(\r)を取り除いてみます。

ファイルサイズが、取り除かれたCR(\r)の数(行数)分の7バイト減っていることがわかります。実際にCR(\r)がなくなっているか、上記同様odコマンドで確認してみます。

改行の位置にあったCR(\r)がなくなり、LF(\n)のみになっていることがわかります。不要な改行コードがなくなったので、シェルスクリプトも正常に実行されるようになります。
trコマンドの>の扱いについて
投稿日 2025/11/23
解説には
以下のようにパイプ(|)やリダイレクト(<)を使用してファイルを指定します。
cat ファイル名 | tr [オプション] [文字列1 [文字列2]]
またはtr [オプション] [文字列1 [文字列2]] < ファイル名
と記載がありますが選択牛正解は
tr -d '\r' < crlf.txt > linux.txt となっています
crlf.txtの後にある > はあってもなくても動作するのでしょうか
y
yklv
2025/11/25 13:03
「tr -d '\r' < crlf.txt」の結果を > により出力しているんだと思います。
linux.txt は入力用のファイルではなく、処理結果を保存するための書き出し先ファイルかと。
コメント
この投稿に対して返信しませんか?