Como a figura ilustra, eu uso l
o arquivo na pasta atual. E então eu quero obter o arquivo com número 1
, então eu uso pipe
oe o grep
.
Mas por que o arquivo 2
e 22
é exibido? E qual é o 1;34m
?
$ l
./ ../ 1 11 2 22
$ l | grep "1"
1;34m./ 1;32m../ 1 11 2 22
Atualizar
Eu já tenho o apelido no comando l
no meu zshrc
arquivo.
alias lsp="ls"
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
alias ls="ls -alh --color"
E aqui está o resultado do type
comando:
>$ type ls
ls is an alias for ls -alh --color
> $ type l
l is an alias for ls -CF
command-line
grep
ls
pipe
Lee
fonte
fonte
type -a l
?type ls
comando, por favor? você modificou ols
alias de alguma forma?Respostas:
Primeiro de tudo, o que você está tentando fazer
l| grep <filename>
é ruim. Não faça isso. Aqui está o porquê.l
comando é realmente um alias parals -CF
Por padrão no Ubuntu
bash
,ls
é um apelido parals --color=auto
. Como a chave de aço apontada nos comentários--color=auto
deve desativar a colorização. No seu caso específico, você temalias ls="ls -alh --color"
ealias l="ls -CF"
, que basicamente acaba sendols -alh --color -CF
. Essa combinação específica de switches ainda envia saída colorida sobre um tubo. Por exemplo:Observe como os diretórios
.
e..
têm as mesmas seqüências de escape.O que tudo isso significa
Isso significa que
l
produzirá uma lista colorida de arquivos de acordo com o tipo de arquivo. O problema é que a colorização acontece com o uso de seqüências de escape . Isso é o que as1:34m
coisas são - elas são uma sequência de escape para cores específicas.O principal problema é que a análise
ls
geralmente leva a resultados e desastres errados nos scripts, simplesmente porquels
permite seqüências de escape como explicadas anteriormente e outros caracteres especiais. Consulte este artigo para obter mais informações: http://mywiki.wooledge.org/ParsingLsO que você deve fazer:
Use o
find
comando:Você poderia fazer algo assim com o shell glob e o
[[
comando de teste moderno :Ou talvez use python, que possui recursos de manipulação de nome de arquivo muito melhores do que
bash
sozinhoSe não houver necessidade de processar a saída
ls
, o simples globbing tambémls
pode fazer o trabalho. (Lembre-se, isso é apenas para visualizar a lista de arquivos, não para transmiti-la para outro programa para lidar com o texto de saída)fonte
--color=always
também for especificado - como parte do alias paral
ou em um alias anterior parals
si (substituindo o padrãoalias ls='ls --color=auto'
).ls
no bash por padrão?type ls
dá-me que é um apelido para #ls --color=auto
auto
desativa a cor em um tubo AFAIK. Para ver sequências de cores ANSI, ele deve ter sido alterado para--color=always
, nols
alias ou nol
aliasls --color
, não impede a colorização (testei isso também).Seus comandos
l
els
são configurados como aliases.Quando você os executa, canaliza a saída através de
grep "1"
(usando|
) cada linha da tela em que1
aparece é exibida, com a1
cor vermelha.Como os nomes de arquivo
.
,..
,2
e22
aparecem na mesma linha de tela, eles são emitidos porgrep
bem, mas não aparecem em vermelho que mostragrep
partidas.A
:34m
é uma sequência de escape para uma cor que não pintar corretamente. Com base na sua pergunta revisada, com a saída detype -a l
etype -a
ela pode ser reproduzida no meu sistema. Observe que você deve alterar seu alias de--color
para--color=auto
:Saída colorida
fonte
1:34m
coisas não são corrupção, são seqüências de escape usadas para colorir o texto. Veja minha resposta nessa parte;)No seu julgamento, você estava chamando seu
ls
apelido, portanto, o1;34m
ruído semelhante que vem da coloração e, como o tubo|
recebe tudo isso na mesma linha, elegrep
corresponde ao arquivo1
dessa linha e, consequentemente, imprime essa linha. Isto é o que você vê na tela.Quando você está fazendo coisas assim, é sempre bom voltar ao comando do sistema com 1 resultado por linha.
Para se livrar dos aliases, basta digitar
\ls
e usar a opção-1
para imprimir resultados separados por feeds de linha.Nota: o método de barra invertida funciona com todos os comandos,
\command
apenas chama o comando do sistema sem serrilhado.fonte