2011-12-21 57 views
1

我正在使用Mac ssh'ing進入無頭RedHat框,並且我需要爲下游程序創建文件列表以進行操作。帶換碼字符的ASCII文本(ls輸出重定向)

當我重定向ls的輸出時,創建的文件有一堆轉義字符,我的下游腳本無法正確讀取文件名。當我創建和cat文件,一切都看起來不錯:

[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文件,這是什麼樣子(所有的小^[[^[字符在我的終端模擬器藍色) :

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

感謝你們所有人,伊萬,保羅和成像儀。是的,我用ls - ls --color =總是很久以前,完全忘了它。 \ ls做的伎倆。 – 2011-12-21 23:03:53

回答

5

你的ls看起來像是'ls --color'的別名。如果你沒有使用它,你將不會得到任何着色,這是逃生角色的來源。 alias | grep ls會告訴你。我離開ls unaliased,而不是像l到'ls --color -F'。

1

看起來像ls命令認爲它在終端中執行,即使您是管道輸出。您可以嘗試--color=never選項:

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

你看到了什麼,當你運行

$ alias 

我看到以下內容:

alias ls='ls --color=auto' 

該系統通常是足夠聰明,不色重定向時但你可以試試

$ unalias ls 

,然後再試一次,以確保您不會看到顏色。

2

在這種情況下,我認爲來自ls的附加信息正在打印到文件中。 cat命令正在使用該信息在終端中輸出顏色,而vim正在顯示顏色字符,因爲它們在文件中。

要解決,而不是ls *.pbs使用以下命令/bin/ls *.pbs

這樣你可以獨自離開你的別名,而正從LS所期望的行爲。

2

而不是改變你的別名,你可以這樣做:

\ls *.pbs 
2

它並不明顯,但你可以用echo包裹,echo將刪除所有ANSI字符轉義。 (見截圖)

FS結構

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

2 directories, 5 files 

項列表 - 只是項目

[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 

編輯

對不起,我提供了壞榜樣,我會嘗試通過截屏,以提高他們: ls: echo removed ANSI escape chars

grep: echo removed ANSI escape chars