【问题标题】:Adding a character after a digit and dot in bash在bash中的数字和点之后添加一个字符
【发布时间】:2020-10-11 14:50:11
【问题描述】:

我想通过在任何数字和它之前的点之间添加\ 来修改我的变量, 到目前为止,我只在第一个数字和第一个点之后添加了\

我的脚本:

branch="3.2.5"
firstbranch=$(echo $branch | sed -r 's/([0-9]+.)(.)/\1\\2/g') && echo $firstbranch

它生成的输出:

3.\2.5

以及所需的输出:

3.\2.\5

【问题讨论】:

  • 正斜杠还是反斜杠?
  • 试试sed -E 's/([0-9])\./\1.\\/g' <<< "$branch"
  • 您写了 在任何数字和点之间添加 \,但在您想要的输出中,您确实在任何点和数字之间添加了 \,即按其他顺序。
  • 已修复,混淆抱歉

标签: bash shell awk sed


【解决方案1】:

您可以使用:

sed 's/[0-9]\./&\\/g' <<< "$branch"
3.\2.\5

【讨论】:

    【解决方案2】:

    如果您对awk 没问题,请尝试使用链接https://ideone.com/T1suTg 中显示的示例进行跟踪、编写和测试

    echo "$branch" | awk 'BEGIN{FS=".";OFS=".\\"} {$1=$1} 1'
    

    解释: 使用echo 打印shell 变量branch 值并将其输出作为标准输入发送到awk 命令。在awk 程序中的BEGIN 块设置字段分隔符为. 并将输出字段分隔符设置为.\\ 这实际上是.\ 然后在主程序中将第一个字段重新设置为自身,以便输出字段的新值分隔符获取适用。 1 将打印当前行的值。

    【讨论】:

      【解决方案3】:

      此外,可以使用带有sed 的POSIX BRE 表达式在点和数字之间插入\

      branch="3.2.5"
      firstbranch=$(echo $branch | sed 's/\(\.\)\([[:digit:]]\)/\1\\\2/g') && echo $firstbranch
      

      结果:3.\2.\5

      online proof

      正则表达式解释

      --------------------------------------------------------------------------------
        \(                        group and capture to \1:
      --------------------------------------------------------------------------------
          \.                       '.'
      --------------------------------------------------------------------------------
        \)                        end of \1
      --------------------------------------------------------------------------------
        \(                        group and capture to \2:
      --------------------------------------------------------------------------------
          [[:digit:]]              any character of: digits (like \d)
      --------------------------------------------------------------------------------
        \)                        end of \2
      

      【讨论】:

        【解决方案4】:

        变量扩展

        branch="3.2.5"
        echo ${branch//./.\\}
        3.\2.\5
        

        【讨论】:

        • 所有建议中最简单的解决方案
        猜你喜欢
        • 1970-01-01
        • 2022-09-24
        • 2015-02-26
        • 2016-04-27
        • 2011-02-21
        • 1970-01-01
        • 1970-01-01
        • 2022-06-15
        相关资源
        最近更新 更多