2010-07-29 86 views
0

我想採取可能有它的多個空格,然後執行以下字符串:逃逸字符串,使其UNIX準備

1)用下劃線

2)更換空格刪除任何字符不AZ或0-9

3)使結果全部小寫

然後可以使用結果作爲變量。有任何想法嗎?

+0

什麼是 「UNIX準備好」 呢?如果您指的是文件名,則允許除「/」和「\ 0」之外的任何字符。您只需在使用時適當引用它。 – 2010-07-29 19:04:00

+0

你在用什麼環境?您已將* batch *標記放在那裏,通常指的是(Windows)批處理文件。我以某種方式懷疑這是這種情況。 – Joey 2010-07-31 08:48:33

回答

2

我認爲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

Shell變量不能以數字開頭;所以添加「sed -e'1s/^ [0-9]/_&/'」到你的管道。 – pra 2010-08-03 17:56:35

2

下面是使用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 
+0

heh 0暗中從$# – 2010-07-29 17:39:29

+0

@duplicity:是的。好的(意外的)測試用例,看看會發生什麼。 :-) – 2010-07-29 17:41:35

+0

我想過關於建議sed,但不知道如何匹配「空白」而不是僅僅空間。 sed是否支持posix類? – 2010-07-29 17:44:57

0
newvar=`echo "$oldvar" | awk '{gsub(/[ \t]+/,"_") ; gsub(/[^A-Z0-9]+/,"") ; print tolower($0)}' `