2010-12-10 196 views
3

OS X 10.6.5、BASHエコーBASH変数テキストの問題に上書き

私は実行し、この:

echo $IP; echo of; echo $IPLINES 

私はこの出力を得る:

219.80.4.150:3128 
of 
1108 

私はこれを実行すると:

echo $IP of $IPLINES 

私はこの出力を得ます:

of 1108.150:3128 

私が取得することが期待:

219.80.4.150:3128 of 1108 

私は取得しています歪んだ出力を引き起こしますか?

実際のスクリプトは、このです:

#!/bin/bash 

IPLINES=`cat a.txt | wc -l | awk '{print $1}'` 

if [ $IPLINES > 1 ]; then 
    LINE=`expr $RANDOM % $IPLINES + 1` 
    IP=`head -$LINE a.txt | tail -1` 
    sed -e "${LINE}d" -i .b a.txt 

    echo $IP of $IPLINES 
fi 

答えて

9

ここでは、.txtファイルからIP変数を抽出しています。Windowsファイルであるか、Windowsスタイルでコード化されている場合は、末尾に\r\nが付きます。改行を取り除きますが、その中に\rがあれば、行頭に戻ることができますか?

質問がないクイックダーティ修正:echo -nを使用すると、エコーされたテキストの最後に改行が挿入されません。

echo -n $IP; echo -n of; echo -n $IPLINES 

問題が解決しない場合は、おそらく上記のとおりです。右トリミング$IPを試してください。

EDIT:OSX部分は見えませんでした。 OSXでは、行は\rで終わります。これは問題でなければなりません。

+0

右、右。ファイルの行末を変更して、問題を解決しました。ありがとう-n、私はその旗に慣れていませんでした。 – zevlag

+3

実際にはOS Xでは、通常、行は* \で終わらない*。一般的には、従来のMac OSの古いレガシーアプリからのファイルにしか見られないかもしれません。 –

+0

'tr'を使って不要な文字を取り除くこともできます:' cleanline = "$(echo $ line | tr -d '\ r')" – xonya

2

$IPの終わりにキャリッジリターン(\r)があるように思われます。

関連する問題