ls -1 | grep -E "^rm_.*"
parece bom e deve funcionar. O motivo pelo qual ele não funciona é o alias vinculado ao comando ls
em seu perfil.
Para garantir, tente
/bin/ls -1 | grep -E "^rm_.*"
Estou tentando listar todos os arquivos e selecionar apenas determinados deles.
ls -1
retorna-me a lista
abc
abcd
rm_0818-051752-753-06
depois disso, quero selecionar apenas por este critério para retornar a terceira linha, assim:
ls -1 | grep -E "^rm_.*"
mas não recebo nada.
Estou tentando reconhecer o primeiro caractere da terceira linha desta maneira:
var=$(ls -1 | grep -E "rm_")
echo $var //returns rm_0818-051752-753-06
echo ${var:0:1} //returns some strange symbol 001B in square
Você pode me explicar esse comportamento e como eu poderia usar o primeiro caractere ^? Obrigado
Parece que você tem grep
aliased para grep --color=always
ou similar. Você pode verificar isso executando type grep
. Posso reproduzir um comportamento semelhante:
$ var=$(ls -1 | grep --color=always "^rm")
$ echo ${var:0:1}
## Weird boxed character appears here
Para ver o que está acontecendo um pouco melhor, podemos passar $var
a od
:
$ echo "$var" | od -c
0000000 033 [ 0 1 ; 3 1 m 033 [ K r m 033 [ m
0000020 033 [ K _ 0 8 1 8 - 0 5 1 7 5 2 -
0000040 7 5 3 - 0 6 \n
0000047
O 033 [ 0 1 ; 3 1 m 033 [ K
é cor ANSI escapa , e é isso que está quebrando aqui. Você pode evitar isso usando uma versão não balanceada de grep
:
/bin/grep '^rm_'
ou
\grep '^rm_'
Melhor ainda, não analise ls
, pois isso geralmente leva a outros problemas . Uma maneira mais segura e simples de fazer o que você quer é:
$ var="rm*"
$ echo $var
rm_0818-051752-753-06
$ echo ${var:0:1}
r
Por que o grep, por que não apenas:
ls -1 rm_*