Oi Mohammad Alzatari Ans ajudou-me a resolver este problema.
$ ls -la | grep -i text | awk '{printf ":%s", $9}'|awk '{print substr($1,2);}'
text1.txt:text2.txt:text3.txt:text4.txt
Problema resolvido
A seguir, minha saída de comando:
# ls -la | grep -i text | awk '{print $9}'
text1.txt
text2.txt
text3.txt
text4.txt
Eu queria imprimir o valor de saída como:
text1.txt:text2.txt:text3.txt:text4.txt
Não, não não analise ls
. Você quer
( files=(*text*); IFS=:; echo "${files[*]}" )
Eu uso um subshell para que a variável IFS no seu shell atual não seja afetada.
Se tiver certeza de que seus nomes de arquivos não contêm caracteres de nova linha, faça
ls -1 *text* | paste -sd:
Você poderia jogar coisas em um script bash da seguinte forma:
unset list
for file in 'ls -a | grep -i 'text''; do list=$list"$file:"; done
echo ${list::-1}
O unset
inicial é para remover os valores anteriores se você estiver executando o comando várias vezes. Para se livrar dos dois pontos finais (:), você pode fazer isso enquanto você está com echo
se estiver executando o bash 4.2
ou superior, como eu tenho no meu código.
por favor, tente isso, deve funcionar
$ ls -la | grep -i text | awk '{printf ": %s", $9}'
Não é uma solução exata e precisa de algumas melhorias.
Basta enviar a saída para tr
$ ls -la | grep -i text | awk '{print $9}' | tr '\n' ':'
text1:text2:text4:text5:
Não consegui remover o último :
no final e também não consegui chegar à próxima linha.