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.