bash中的子串替换

时间:2014-12-07 17:55:26

标签: string bash replace str-replace tr

我今天的问题是用这样的字符串替换 - > 6427//6422 6429//6423 6428//6421

//,。我尝试了不同的命令:

  • finalString=${startingString//[//]/,}无法正常工作
  • fileTemp=$(echo -e "$line\n" | tr "//" ","执行双重替换:

    hello//world ---> hello,,world

有人知道如何做到这一点吗?

3 个答案:

答案 0 :(得分:3)

您可以使用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会将输入中的每个字符转换为输出中的另一个字符,此处为&#39 ;处理2个字符//

答案 1 :(得分:1)

您可以将sed用作

$ echo "6427//6422 6429//6423 6428//6421" | sed 's#//#,#g'
6427,6422 6429,6423 6428,6421

答案 2 :(得分:1)

您也可以尝试这样的sed命令

sed 's#/\{2,2\}#,#g'

找到double&#34; /&#34;并用&#34;,&#34;

替换

实施例

echo "6427//6422 6429//6423 6428//6421"| sed 's#/\{2,2\}#,#g'

结果

6427,6422 6429,6423 6428,6421