Найпростіший спосіб замінити пробіли на (підкреслення) _ у 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, використовуйте доступні вам функції.
знаряддя

можуть бути також пунктуаційні знаки, які є законними. ми ніколи не знаємо.
ghostdog74

thx для цього рішення саме те, що я шукав. Велике спасибі
flazzarini

18

Це прикордонне програмування, але зверніть увагу на використання tr :

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

Повинен це зробити. Перший виклик стискає пробіли, другий замінює підкресленням. Ймовірно, вам потрібно додати TAB та інші пробіли, це лише для пробілів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.