2013-12-05 4 views
2

Я написал сценарий оболочки unix bash.Unix - Как заменить недопустимые символы?

Я хочу заменить все недопустимые символы в тексте с помощью подчеркивания («_»). Мой список действительных символов - a-z, A-Z, "_" и 0-9. В основном это буквенно-цифровые и _. В приведенном ниже примере

#!/bin/bash 
hostname=soa.ax-123 

Я хочу значение переменной хоста, чтобы быть заменены soa_ax_123

Может кто-нибудь помочь мне написать логин, чтобы найти и заменить недопустимые символы с «_»

заранее спасибо Криса

+1

'sed' является вашим другом. – Wrikken

+0

Кажется идеальной работой для 'tr'. tr - ваш друг. 'tr -c '[[: alnum:] _]' _'. –

ответ

10

Вы можете сделать замену шаблона в расширении параметров:

#!/bin/bash 
hostname=soa.ax-123 
newhostname=${hostname//[^a-zA-Z_0-9]/_} 
echo "The fixed hostname is $newhostname" 
+0

Другие примеры [поиск и замена] (http://wiki.bash-hackers.org/syntax/pe#search_and_replace) – jfs

+0

Вы также можете использовать предопределенный класс символов 'word':' newhostname = $ {hostname // [^[: word:]]/_} ' – chepner

+0

@chepner в этом случае вам нужно установить локаль на C сначала –

0

Вы можете использовать это:

echo $hostname | sed 's/\W/_/g' 
Смежные вопросы