ostatnio musiałem napisać mały skrypt, który parsował maszyny wirtualne w XenServer, a ponieważ nazwy maszyn wirtualnych są głównie ze spacjami, np. w Windows XP lub Windows Server 2008, musiałem je przyciąć i zastąpić je podkreśleniami _. Znalazłem proste rozwiązanie, aby to zrobić za pomocą seda, który jest świetnym narzędziem, jeśli chodzi o manipulowanie strunami.
echo "This is just a test" | sed -e 's/ /_/g'
zwroty
This_is_just_a_test
Czy są inne sposoby, aby to osiągnąć?
Odpowiedzi:
Możesz to zrobić używając tylko powłoki, bez potrzeby
tr
lubsed
$ str="This is just a test" $ echo ${str// /_} This_is_just_a_test
źródło
${str//[^a-zA-Z0-9]/_}
; tak czy inaczej, jeśli nie trzymasz się czystej powłoki POSIX, użyj dostępnych funkcji.To jest programowanie z pogranicza, ale spójrz na użycie tr :
$ echo "this is just a test" | tr -s ' ' | tr ' ' '_'
Powinienem to zrobić. Pierwsze wywołanie ściska spacje, drugie zastępuje podkreśleniem. Prawdopodobnie musisz dodać TAB-y i inne białe znaki, dotyczy to tylko spacji.
źródło