экранировать строку и сделать ее готовой для Unix - PullRequest
0 голосов
/ 29 июля 2010

Я хотел бы взять строку, которая может содержать несколько пробелов, и сделать следующее:

1) Заменить пробел подчеркиванием

2) Удалить все символы, которые не являются AZили 0-9

3) Сделать результат все строчными

Затем можно использовать результат в качестве переменной.Есть идеи?

Ответы [ 3 ]

2 голосов
/ 29 июля 2010

Вот еще один подход с использованием sed:

oldvar="HELLO MY BABY @$#@$ HI"

newvar=`echo $oldvar | sed -e "s/[A-Z]/\l&/g" -e "s/[^a-z0-9]/_/g"`

Результат:

hello_my_baby__0___hi
2 голосов
/ 29 июля 2010

Я думаю tr может делать то, что вы хотите.

variable=$(echo "${input}" | tr A-Z a-z | tr [:blank:] _ | tr -cd [:alnum:]_)

Пояснение:

tr A-Z a-z - перевод букв верхнего регистра в нижний регистр.

tr [:blank:] _ - переводит пробелы в подчеркивание.

tr -cd [:alnum:]_ - Удалить все символы, которые не являются буквенно-цифровыми или подчеркиваниями.

ПРИМЕЧАНИЕ. Если вы хотите удалить подчеркивания до преобразования пробелов в подчеркивания, можно добавить tr -cd _ в начале цепочки труб.

0 голосов
/ 30 июля 2010
newvar=`echo "$oldvar" | awk '{gsub(/[ \t]+/,"_") ; gsub(/[^A-Z0-9]+/,"") ; print tolower($0)}' `
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...