Убрать ASCII-текст управляющих символов (перенаправление вывода ls) - PullRequest
1 голос
/ 22 декабря 2011

Я использую Mac ssh'ing в безголовый ящик RedHat, и мне нужно создать список файлов для последующей программы.

Когда я перенаправляю вывод ls, созданный файл содержит несколько escape-символов, и мои нижестоящие сценарии не могут правильно прочитать имена файлов. Когда я создаю и cat файл, все выглядит нормально:

sdt5z@franklin:~/cufflinks$ ls *.pbs
01_SL8426.pbs  03_SL8428.pbs  09_SL8891.pbs
02_SL8427.pbs  04_SL8429.pbs

sdt5z@franklin:~/cufflinks$ ls *.pbs > myfiles.txt

sdt5z@franklin:~/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
~                                                                
~                                                                
~                                                                
~ 

Запуск команды file показывает, что этот файл имеет escape-последовательности.

sdt5z@franklin:~/cufflinks$ file myfiles.txt 
myfiles.txt: ASCII text, with escape sequences

Мой вопрос: как я могу очень просто ls файлы, перенаправить их в файл, без каких-либо escape-символов? Что вызывает это в первую очередь?

Спасибо. myfiles.txt: текст ASCII с escape-последовательностями

Ответы [ 6 ]

5 голосов
/ 22 декабря 2011

Ваш ls выглядит как псевдоним что-то вроде 'ls --color'. Если вы укажете его, вы не получите никакой раскраски, из которой и исходят спасательные персонажи. alias | grep ls скажет вам. Я оставляю ls без псевдонима и вместо псевдонима что-то вроде l до 'ls --color -F'.

2 голосов
/ 13 января 2015

Это не очевидно, но вы можете обернуть с помощью echo, echo удалит все escape-символы ANSI.(см. снимки экрана)

Структура FS :

daniel@synapse:/tmp/test$ tree
.
├── archive.tar.bz2
├── archive.tar.gz
├── dir1
│   └── file.txt
├── dir2
│   └── file.pdf
└── image.png

2 directories, 5 files

Элементы списка - только элементы :

daniel@synapse:/tmp/test$ for ITEM in `echo *`; do echo ${ITEM}; done
archive.tar.bz2
archive.tar.gz
dir1
dir2
image.png

Элементы списка - с относительным путем :

daniel@synapse:/tmp/test$ for ITEM in `echo ./*`; do echo ${ITEM}; done
./archive.tar.bz2
./archive.tar.gz
./dir1
./dir2
./image.png

Элементы списка - с абсолютным путем :

daniel@synapse:/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

2 голосов
/ 01 октября 2013

Вместо того, чтобы изменить свой псевдоним, вы можете просто сделать:

\ls *.pbs
2 голосов
/ 22 декабря 2011

В этом случае, я думаю, что дополнительная информация от ls печатается в файл. Команда cat использует информацию для раскраски вывода в терминале, в то время как vim отображает цветные символы в том виде, как они есть в файле.

Чтобы исправить, вместо ls *.pbs используйте следующую команду /bin/ls *.pbs

Таким образом, вы можете оставить свой псевдоним в покое, одновременно получая желаемое поведение от ls.

1 голос
/ 22 декабря 2011

Что вы видите при запуске

$ alias

Я вижу следующее:

alias ls='ls --color=auto'

Система обычно достаточно умна, чтобы не красить при перенаправлении, но вы можете попробовать

$ unalias ls

и попробуйте еще раз, чтобы убедиться, что вы не получите цвета.

1 голос
/ 22 декабря 2011

Похоже, команда ls думает, что она выполняется в терминале, даже если вы передаете вывод.Вы можете попробовать --color=never вариант:

ls --color=never *.pbs > myfiles.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...