недавно мне пришлось написать небольшой скрипт, который анализировал виртуальные машины в XenServer, и поскольку имена виртуальных машин в основном содержат пробелы, например, в Windows XP или Windows Server 2008, мне пришлось обрезать эти пробелы и заменить их подчеркиванием _. Я нашел простое решение, используя sed, который является отличным инструментом, когда дело доходит до манипуляций со строками.
echo "This is just a test" | sed -e 's/ /_/g'
возвращается
This_is_just_a_test
Есть ли другие способы добиться этого?
Ответы:
Вы можете сделать это, используя только оболочку, без необходимости
tr
илиsed
$ str="This is just a test" $ echo ${str// /_} This_is_just_a_test
источник
${str//[^a-zA-Z0-9]/_}
; в любом случае, если вы не придерживаетесь чистой оболочки POSIX, используйте доступные вам функции.Это пограничное программирование, но попробуйте использовать tr :
$ echo "this is just a test" | tr -s ' ' | tr ' ' '_'
Должен это сделать. Первый вызов сжимает пробелы, второй заменяет подчеркивание. Вероятно, вам нужно добавить табуляции и другие символы пробелов, это только для пробелов.
источник