Самый простой способ заменить пробелы на (подчеркивание) _ в bash [закрыто]


92

недавно мне пришлось написать небольшой скрипт, который анализировал виртуальные машины в XenServer, и поскольку имена виртуальных машин в основном содержат пробелы, например, в Windows XP или Windows Server 2008, мне пришлось обрезать эти пробелы и заменить их подчеркиванием _. Я нашел простое решение, используя sed, который является отличным инструментом, когда дело доходит до манипуляций со строками.

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

возвращается

This_is_just_a_test

Есть ли другие способы добиться этого?


8
а вопрос?
RageZ

2
Привет, latz, Stackoverflow - это сайт вопросов и ответов. Вы задаете вопросы, а другие на них отвечают, или вы можете отвечать на вопросы других. Если вы хотите поделиться своими знаниями, вы можете задать вопрос, а затем ответить на него самостоятельно (оставив некоторое время, чтобы и другие ответили).
mouviciel

2
Группы думали, что я добавлю эти знания таким образом, чтобы они хранились здесь. В любом случае сделаю так, как ты сказал в следующий раз, ответив на свой вопрос :)
flazzarini

Ответы:


175

Вы можете сделать это, используя только оболочку, без необходимости trилиsed

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

5
Или конвертировать все слова символов не-ASCII для подчеркивания: ${str//[^a-zA-Z0-9]/_}; в любом случае, если вы не придерживаетесь чистой оболочки POSIX, используйте доступные вам функции.
guns

могут быть и допустимые знаки препинания. мы никогда не узнаем.
ghostdog74

спасибо за это решение именно то, что я искал. Большое спасибо
flazzarini

18

Это пограничное программирование, но попробуйте использовать tr :

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

Должен это сделать. Первый вызов сжимает пробелы, второй заменяет подчеркивание. Вероятно, вам нужно добавить табуляции и другие символы пробелов, это только для пробелов.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.