【问题标题】: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
        

        【讨论】:

          猜你喜欢
          • 2012-08-09
          • 2017-07-03
          • 2015-06-08
          • 2017-01-13
          • 2016-03-23
          • 1970-01-01
          • 2021-06-23
          • 1970-01-01
          • 2018-01-11
          相关资源
          最近更新 更多