【问题标题】:Read variables from searched pattern and replace the pattern with different one using read variables从搜索到的模式中读取变量,并使用读取变量将模式替换为不同的模式
【发布时间】:2018-02-07 03:19:46
【问题描述】:

我想替换文本文件中的模式并从模式中读取变量 xy 以将它们插入到我将要替换的模式中。

我想替换每次出现的:

Array<x, y> someArray;

以下内容:

Array<> someArray(x, y);

所以,例如这一行:

Array<3, 4> someArray;

将替换为:

Array<> someArray(3, 4);

如何使用 awk 或 sed 实现这一点?

【问题讨论】:

    标签: linux awk sed


    【解决方案1】:

    sed

    sed -E 's/^(Array)<([^>]+)>( someArray)/\1<>\3(\2)/' file
    

    【讨论】:

      【解决方案2】:
      $ cat r.sh
      awk '
      BEGIN {
          b = "[ \t]+"         # blank
          i = "[_a-zA-Z0-9]+"  # identifier: should match x, 1 and so on
      }
      {
          parse()
          if (OK)
              printf "Array<> %s(%s, %s);\n", name, x, y
          else
              print $0
      }
      function parse() {
          l = $0; OK = 1
          n("Array")
          n("<")
          n(i); x = P
          n(",")
          n(i); y = P
          n(">")
          n(i); name = P
      }
      function n(p) {
          if (!OK) return
          n1(b); OK = 1 # skip blank
          return n1(p)
      }
      function n1(p) {
          p = "^" p
          if (match(l, p)) P = n0()
          else OK = 0
      }
      function n0(   s) {
          s = substr(l, 1, RLENGTH)
          l = substr(l, RLENGTH + 1)
          return s
      }
      ' "$@"
      

      用法

      $ sh r.sh file
      Array<> someArray(x, y);
      Array<> someArray(3, 4);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-02
        • 1970-01-01
        相关资源
        最近更新 更多