2017-04-10 103 views
1

我有一個小任務。改變bash中字符串類型變量的分隔符

我應該寫:

data="duke,rock,hulk,donovan,john" 

而且在未來的變量,我應該改變第一個變量的分隔符。

data2="duke|rock|hulk|donovan|john" 

什麼是在bash上做到這一點的正確方法?

這是腳本的一小部分,我該怎麼做。

例如,我使用結構「WHILE-GETOPS-CASE」在參數中使用用戶名來排除它們。

ls /home/ | egrep -v $data2 
+1

你想'的egrep -v「$ data2「'來防止shell在值上執行通配符擴展或空白標記。 – tripleee

+1

不要分析'ls'的輸出。如果您需要的文件不符合模式,請使用擴展模式。 'ls/home /!(duke | rock | hulk | donovan | john)'。 – chepner

回答

5

你可以很容易具有膨脹代替單個字符:

data="duke,rock,hulk,donovan,john" 
data2=${data//,/|} 
echo "$data2" 

打破的語法:

  • ${data裝置基於在可變data找到的值「擴大;
  • //的意思是「搜索所有發生的」;
  • 孤獨的/意味着「替換下面的內容」。

請注意,某些字符可能需要轉義,但不能使用逗號和豎線。

然後你可以過濾結果是這樣的:

ls /home/ | egrep -v "$data2" 
1

另一個非常類似的方式是使用tr(翻譯或刪除字符):

data="duke,rock,hulk,donovan,john" 
data2=$(echo $data | tr ',' '|') 
echo "$data2"