【问题标题】:Substring substitution in bashbash中的子字符串替换
【发布时间】:2015-02-05 09:22:31
【问题描述】:
我今天的问题是替换成这样的字符串 --> 6427//6422 6429//6423 6428//6421
每个// 都有一个,。我尝试了不同的命令:
-
finalString=${startingString//[//]/,} 不起作用
-
fileTemp=$(echo -e "$line\n" | tr "//" "," 进行这样的双重替换:
hello//world ---> hello,,world
有人想出办法吗?
【问题讨论】:
标签:
string
bash
replace
str-replace
tr
【解决方案1】:
您可以使用 BASH 字符串操作(需要使用 \/ 转义 /):
s='6427//6422 6429//6423 6428//6421'
echo "${s//\/\//,}"
6427,6422 6429,6423 6428,6421
同样使用 awk:
awk -F '//' -v OFS=, '{$1=$1}1' <<< "$s"
6427,6422 6429,6423 6428,6421
PS: tr 不能在此处使用,因为 tr 将输入中的每个字符 转换为输出中的另一个字符,而这里您要处理 2 个字符//.
【解决方案2】:
你可以使用sed作为
$ echo "6427//6422 6429//6423 6428//6421" | sed 's#//#,#g'
6427,6422 6429,6423 6428,6421
【解决方案3】:
你也可以试试这样的sed命令
sed 's#/\{2,2\}#,#g'
找到双“/”并替换为“,”
例子
echo "6427//6422 6429//6423 6428//6421"| sed 's#/\{2,2\}#,#g'
结果
6427,6422 6429,6423 6428,6421