2012-08-29 3 views
9

は、次のechoコマンドを考えてみましょ制御文字を解釈するためにLinuxの中で「猫」を作るために:はどのように

すなわち\ rの特殊文字コマンドラインに出力 atを生成
echo -e "at\r" 

が解釈されています。私はファイル内のいくつかのテキストで全く同じことをしたい。正確に同じ順序

at\r 

を想定することは、私は、端末上に表示したい、at.txtという名前のファイルに書き込まれます。しかし

cat at.txt 

は、私が欲しいものではありませんどのような出力に

at\r 

を与えます。私はターミナルで印刷されるだけではなく、\ rという特殊なシーケンスを解釈してほしい。誰でも構いませんか?

おかげ アレックス

+1

は 'エコー-e "$(猫ファイル)"'の仕事でしょうか? (小さなファイルの場合) – knittl

+2

ファイルが非常に大きい場合は、xargsを試すことができます: 'cat file | xargs echo -ne' –

+0

最初の提案(knittl)、2番目の提案(リー)文字列 'atr'を生成します。 – Alex

答えて

1

ビルトインechoコマンドは、共通のバックスラッシュエスケープを解釈します。しかし、ファイルでは、それを解釈するか、同様の方法でそれを変換する必要があります。 sedプログラムでこれを行うことができます。

sed -e 's/\\r/\r/' < at.txt 

しかし、私はここでも同じことを学びました。外部のechoコマンドは、内部コマンドとは動作が異なります。

/bin/echo "\r" 

echo "\r" 

とは異なる出力を持っていますが、基本的に、あなたは、単一のバイト0x0Dのにlitteral \r文字列を変換するフィルタを必要としています。

+0

これは単に正しくありません... 'echo" \ r "'対 '' echo -e "\ r" 'を試してください。シェルであれば、両方のコマンドが同じ文字列を出力します。 – knittl

+0

外部エコーの動作が異なります。 shのエコーもbashのエコーとは違った動作をします – knittl

10

なぜ:

while read -r line; do echo -e $line; done < at.txt 
3

あなたが簡単に行えます。

echo -e $(cat at.txt)