A maneira mais fácil de substituir espaços em branco por (sublinhados) _ em bash [fechado]


91

Recentemente, tive que escrever um pequeno script que analisou VMs no XenServer e como os nomes das VMs são principalmente com espaços em branco, por exemplo, Windows XP ou Windows Server 2008, tive que cortar esses espaços em branco e substituí-los por sublinhados _. Eu encontrei uma solução simples para fazer isso usando sed, que é uma ótima ferramenta quando se trata de manipulação de cordas.

echo "This is just a test" | sed -e 's/ /_/g'

retorna

This_is_just_a_test

Existem outras maneiras de fazer isso?


8
e a pergunta é?
RageZ de

2
Olá latz, Stackoverflow é um site de perguntas e respostas. Você faz perguntas e outras pessoas respondem ou pode responder às perguntas de outras pessoas. Se quiser compartilhar seu conhecimento, você pode fazer uma pergunta e responder você mesmo (depois de deixar algum tempo para que outras pessoas também respondam).
mouviciel de

2
oups pensei em adicionar esse conhecimento dessa forma, para que fique armazenado aqui. De qualquer forma, farei como você disse da próxima vez, respondendo minha própria pergunta :)
flazzarini

Respostas:


175

Você pode fazer isso usando apenas o shell, sem necessidade de troused

$ str="This is just a test"
$ echo ${str// /_}
This_is_just_a_test

5
Ou converter todos os caracteres de texto não-ASCII em sublinhados: ${str//[^a-zA-Z0-9]/_}; de qualquer forma, se você não está se limitando ao shell POSIX puro, use os recursos disponíveis para você.
armas de

pode haver pontuações que também são legítimas. nunca sabemos.
ghostdog74

Obrigado por esta solução exatamente o que eu estava procurando. Muito obrigado
flazzarini

17

Esta é uma programação limítrofe, mas procure usar tr :

$ echo "this is just a test" | tr -s ' ' | tr ' ' '_'

Deve fazer isso. A primeira invocação comprime os espaços, a segunda substitui com sublinhado. Você provavelmente precisa adicionar TABs e outros caracteres de espaço em branco, isso é apenas para espaços.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.