2017-04-10 68 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"