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 para ls -CF
$ type -a l
l is aliased to `ls -CF'
Por padrão no Ubuntu bash, lsé um apelido para ls --color=auto. Como a chave de aço apontada nos comentários --color=autodeve desativar a colorização. No seu caso específico, você tem alias ls="ls -alh --color"e alias l="ls -CF", que basicamente acaba sendo ls -alh --color -CF. Essa combinação específica de switches ainda envia saída colorida sobre um tubo. Por exemplo:
$ ls -alh --color -CF ~/TESTDIR | cat -A
^[[0m^[[01;34m.^[[0m/ ^[[01;34m..^[[0m/ 1.txt 2.txt 3.txt out.txt$
Observe como os diretórios .e ..têm as mesmas seqüências de escape.
O que tudo isso significa
Isso significa que lproduzirá 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 as 1:34mcoisas são - elas são uma sequência de escape para cores específicas.
O principal problema é que a análise lsgeralmente leva a resultados e desastres errados nos scripts, simplesmente porque lspermite seqüências de escape como explicadas anteriormente e outros caracteres especiais. Consulte este artigo para obter mais informações: http://mywiki.wooledge.org/ParsingLs
O que você deve fazer:
Use o findcomando:
bash-4.3$ ls
1.txt 2.txt 3.txt out.txt
bash-4.3$ find . -maxdepth 1 -iname "*1*"
./1.txt
Você poderia fazer algo assim com o shell glob e o [[comando de teste moderno :
bash-4.3$ for file in * ;do if [[ "$file" =~ "1" ]] ;then echo "$file" ;fi ; done
1.txt
Ou talvez use python, que possui recursos de manipulação de nome de arquivo muito melhores do que bashsozinho
bash-4.3$ python -c 'import os;print [f for f in os.listdir(".") if "1" in f ]'
['1.txt']
Se não houver necessidade de processar a saída ls, o simples globbing também lspode 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)
bash-4.3$ ls *1*
1.txt