Il modo più semplice per sostituire gli spazi bianchi con (trattini bassi) _ in bash [chiuso]


91

Recentemente ho dovuto scrivere un piccolo script che analizzava le VM in XenServer e poiché i nomi delle VM sono per lo più con spazi bianchi in Windows XP o Windows Server 2008, ho dovuto tagliare quegli spazi bianchi e sostituirli con trattini bassi _. Ho trovato una soluzione semplice per farlo usando sed che è un ottimo strumento quando si tratta di manipolare le stringhe.

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

ritorna

This_is_just_a_test

Ci sono altri modi per farlo?


8
e la domanda è?
RageZ

2
Ciao latz, Stackoverflow è un sito di domande e risposte. Fai domande e gli altri rispondono, oppure puoi rispondere alle domande degli altri. Se vuoi condividere le tue conoscenze, puoi fare una domanda, quindi rispondere tu stesso (dopo aver lasciato un po 'di tempo anche agli altri per rispondere).
mouviciel

2
oups ha pensato che avrei aggiunto questa conoscenza in questo modo, quindi è memorizzata qui. Comunque lo farò come hai detto la prossima volta, rispondendo alla mia stessa domanda :)
flazzarini

Risposte:


175

Puoi farlo usando solo la shell, senza bisogno di trosed

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

5
O convertire tutti i caratteri di parola non-ASCII di sottolineatura: ${str//[^a-zA-Z0-9]/_}; in ogni caso, se non ti attieni alla pura shell POSIX, usa le funzionalità a tua disposizione.
pistole il

potrebbero esserci anche punteggiature legittime. Non lo sapremo mai.
ghostdog74

grazie per questa soluzione esattamente quello che stavo cercando. Grazie mille
flazzarini

17

Questa è una programmazione borderline, ma cerca di usare tr :

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

Dovrebbe farlo. La prima invocazione riduce gli spazi, la seconda sostituisce con un trattino basso. Probabilmente è necessario aggiungere TAB e altri caratteri di spazio, questo è solo per gli spazi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.