ファイルを変数にロードしていますが、問題はファイルがWindowsでフォーマットされているため、改行で^M
はなく改行が表示されることです。
変数の値をどのように変更しますか? VIでソースコードを変更できることを知っていますが(それでも私はOS Xを使用しています)、元のファイルを変更することはできず、読み取ることしかできないので、^M
変数から削除する必要があります。
私が知っているのは\n
銀とは異なるので、コマンドは機能しません。^M
tr
編集する
質問がはっきりしていないようです。
1行に2つの値をタブで区切り、各行の末尾に^ Mを使用してファイルを1行ずつ分析しました。
value1 value2^M
value3 value4^M
value5 value6^M
value7 value8^M
私のワークフローはとてもシンプルでシンプルです。上記の内容を含むtxtファイルで、個々のフィールドを繰り返し、各行の値を取得します。 2番目の値を印刷すると^ Mがあるので、それを削除したいと思います。
while IFS=$'\t' read -r -a line
do
Type1="${line[0]}"
Type2="${line[1]}"
done < $TXTFILE
これは、Type1を印刷してもかまいませんが、Type2変数に^ Mが含まれていることを意味します。使用しましたが動作tr
しませんでした。sed
変数の最後の文字を削除しましたが、うまくいきませんでした。これが私の質問を明確にすることを願っています。ありがとう
答え1
^M
\r
fortr
またはinsideで指定できるキャリッジリターン(CR)$'…'
。\n
改行文字(LF)を指定します。つまり、^J
Unix行末はLFで、Windows行区切り文字は2文字のシーケンスCR-LFなので、LinuxやmacOSなどのUnixシステムで表示されるWindowsテキストファイルは次のようになります。^M
最後の改行文字が欠落している各行(最後の行を除く)の終わりにあります。
tr
withを使用してファイルからキャリッジリターンを削除できます。
tr -d '\r' <somefile.txt >somefile.txt.new && mv somefile.txt.new somefile.txt
またはより簡単にdos2unix
。
ファイルの変更を防ぐには、ファイルを読み取るときに各行を確認し、行末のCRを削除するだけです。たとえば、タブで区切られた値の解析に使用する場合は、最後のフィールドのread
最後にあるCRを削除します。パラメータ拡張は、${VAR%$'\r'}
後続のCRを引いた値またはVAR
CRで終わらない場合に発生する値を生成します。VAR
while IFS=$'\t' read -r -a line
do
line[$((${#line[@]}-1))]="${line[$((${#line[@]}-1))]%$'\r'}"
Type1="${line[0]}"
Type2="${line[1]}"
done < "$TXTFILE"
答え2
これはスクリプトを修正する最も簡単な方法です。読み取りコマンドの内部フィールド区切り文字として「キャリッジリターン」を追加するだけです。
そしてIFS = $ '\ t\アル字型'-r -a 行を読む する タイプ 1 = "${row[0]}" 2="${row[1]}" と入力してください。 完了< $TXTFILE
答え3
使用(短い文字列の場合):
${var//$'\015'}
例:
$ var=$'This is a test of a CR (\r) character'
$ echo "${var//$'\r'}"
This is a test of a CR () character
長い文字列の場合、sed または awk が必要な場合があります。
答え4
CR+LF 行の末尾に加えて、他のコンテンツインジケータを持たない "DOS" ファイルの内容を変換するより一般的に便利な方法です (Linux の LF のみ)。
Ubuntuの場合、最初で唯一の場合は、次のようにします。
sudo apt インストール dos2unix
od
出力を確認するには、以下のように使用してください。
$ dos2unix < $TXTFILE od -t x1z -w17 | 0000000 76 61 6c 75 65 31 20 20 20 20 76 61 6c 75 65 32 0a > 値 1 値 2. < 0000021 76 61 6c 75 65 33 20 20 20 20 76 61 6c 75 65 34 0a >値 3 値 4.< 0000042 76 61 6c 75 65 35 20 20 20 20 76 61 6c 75 65 36 0a >値 5 値 6.< 0000063 76 61 6c 75 65 37 20 20 20 20 76 61 6c 75 65 38 0a > 値 7 値 8. < 0000104 $猫$ TXTFILE od -t x1z -w18 | 0000000 76 61 6c 75 65 31 20 20 20 20 76 61 6c 75 65 32 0d 0a >値 1 値 2..< 0000022 76 61 6c 75 65 33 20 20 20 20 76 61 6c 75 65 34 0d 0a >値 3 値 4..< 0000044 76 61 6c 75 65 35 20 20 20 20 76 61 6c 75 65 36 0d 0a >値 5 値 6..< 0000066 76 61 6c 75 65 37 20 20 20 20 76 61 6c 75 65 38 0d 0a>値7値8..< 0000110
これは、行の終わりだけでなく、パラメータまたはdos2unix
それに対応する項目unix2dos
(同時にインストールされている)に応じて他の特殊文字も翻訳します。