2011-12-21 14 views
1

私はヘッドレスRedHatボックスにMacを使っていますが、ダウンストリームプログラムが動作するためのファイルのリストを作成する必要があります。エスケープ文字のアスキー文字列(ls出力リダイレクト)

lsの出力をリダイレクトすると、作成されるファイルにエスケープ文字が含まれ、ダウンストリームスクリプトがファイル名を正しく読み取れません。

[email protected]:~/cufflinks$ ls *.pbs 
01_SL8426.pbs 03_SL8428.pbs 09_SL8891.pbs 
02_SL8427.pbs 04_SL8429.pbs 

[email protected]:~/cufflinks$ ls *.pbs > myfiles.txt 

[email protected]:~/cufflinks$ cat myfiles.txt 
01_SL8426.pbs 
02_SL8427.pbs 
03_SL8428.pbs 
04_SL8429.pbs 
09_SL8891.pbs 

をしかし、私はvimの中のファイルを開いた場合、これは(すべての小さな^[[^[文字が私の端末エミュレータで青色に着色されている)のように見えるものです:私は、ファイルを作成し、catすると、すべてが正常に見えます:

1 ^[[0m^[[0m01_SL8426.pbs^[[0m 
    2 ^[[0m02_SL8427.pbs^[[0m 
    3 ^[[0m03_SL8428.pbs^[[0m 
    4 ^[[0m04_SL8429.pbs^[[0m 
    5 ^[[0m09_SL8891.pbs^[[0m 
    6 ^[[m 
~                 
~                 
~                 
~ 

ファイルコマンドを実行すると、このファイルにエスケープシーケンスが含まれていることが示されます。

[email protected]:~/cufflinks$ file myfiles.txt 
myfiles.txt: ASCII text, with escape sequences 

私の質問は、どうすればファイルをエスケープ文字なしでファイルにリダイレクトすることができますか?これは最初の原因は何ですか?

ありがとうございました。 myfiles.txt:エスケープシーケンスを使用したASCIIテキスト

+0

皆さん、Ivan、Paul、idoimagingのおかげで。はい、私はlsにls - color = always long agoのエイリアスを付け、それを完全に忘れました。 \ lsはそのトリックを行います。 –

答えて

5

lsは、「ls --color」のような別名になっているようです。あなたがそれをunaliasするなら、あなたはエスケープ文字がどこから来ているかを示す色付けを取得しません。 alias | grep lsがお知らせします。私はlsに "alaliased"を残し、代わりにlのような別名を 'ls --color -F'にします。

1

lsのように見えますが、パイプ出力していてもターミナルで実行されると考えられます。

ls --color=never *.pbs > myfiles.txt 
1

あなたは

$ alias 

を実行したときに見ています私は以下を参照してください:

alias ls='ls --color=auto' 

リダイレクトするときにシステムがない色に通常十分にスマートであるあなたは、--color=neverオプションを試すことができます試してみてください。

$ unalias ls 

を入力し、再度色を取得しないようにしてください。

2

この場合、lsの追加情報がファイルに出力されていると思います。 catコマンドは、vimがカラー文字をファイル内に表示している間に、その情報を端末の出力に色付けしています。

はLSから目的の動作を取得中 ls *.pbsは、次のコマンド /bin/ls *.pbs

あなただけではあなたのエイリアスを残すことができるこの方法を使用する代わりに、修正します。

2

よりもむしろあなたのエイリアスを変更し、あなただけ行うことができます。

\ls *.pbs 
2

その明白ではありませんが、あなたはechoでラップすることができ、echoはすべてANSIエスケープ文字を削除します。 - ちょうどアイテム

[email protected]:/tmp/test$ tree 
. 
├── archive.tar.bz2 
├── archive.tar.gz 
├── dir1 
│   └── file.txt 
├── dir2 
│   └── file.pdf 
└── image.png 

2 directories, 5 files 

リストアイテム:

FS構造(スクリーンショットを参照)

[email protected]:/tmp/test$ for ITEM in `echo *`; do echo ${ITEM}; done 
archive.tar.bz2 
archive.tar.gz 
dir1 
dir2 
image.png 

リストアイテムを - 相対パスで:

[email protected]:/tmp/test$ for ITEM in `echo ./*`; do echo ${ITEM}; done 
./archive.tar.bz2 
./archive.tar.gz 
./dir1 
./dir2 
./image.png 
件の

リストアイテム - 絶対パスと:

[email protected]:/tmp/test$ for ITEM in `echo $(pwd)/*`; do echo ${ITEM}; done 
/tmp/test/archive.tar.bz2 
/tmp/test/archive.tar.gz 
/tmp/test/dir1 
/tmp/test/dir2 
/tmp/test/image.png 

EDIT

申し訳ありませんが、私は悪い例を提供し、私はスクリーンショットでそれらを改善しようとします: ls: echo removed ANSI escape chars

grep: echo removed ANSI escape chars