【问题标题】:Sed or replace a line for context in part of line.sed 或替换部分行中的上下文行。
【发布时间】:2014-12-01 05:15:03
【问题描述】:

我有数百万行看起来像这样。我正在寻找一种使用“TABLENAME”替换这些行的方法。 “TABLENAME”每次都可以不同。 “TABLENAME”总是在这一行。基本上我希望将此路径转换为表名称。我的想法是寻找“”的第 5 次出现并用 sed 替换它的整行。 sed有这个能力吗?先感谢您。

我的线

path : /BLAH/BLAH1[(@name="BLAH2")]/BLAH/BLAH[(@BLAH="SERVER")]/BLAH[(@name="CHECK")]/sampler[(@name="SAMPLE")][(@type="")]/table[(@name="TABLENAME")]/rows/row[(@name="AROW")]/cell[(@column="ACELL")]

我想要的结果(将我的行转到下面的行)(我不能使用 sed 替换 TABLENAME 的路径,因为有时它可能是不同的表名,我不知道它可能是哪一个)

TABLENAME

【问题讨论】:

    标签: unix replace awk sed


    【解决方案1】:

    不知道我是否完全理解,但请考虑以下输入:

    path : /BLAH/BLAH1[(@name="BLAH2")]/BLAH/BLAH[(@BLAH="SERVER")]/BLAH[(@name="CHECK")]/sampler[(@name="SAMPLE")][(@type="")]/table[(@name="TABLENAME1")]/rows/row[(@name="AROW")]/cell[(@column="ACELL")]
    path : /BLAH/BLAH1[(@name="BLAH2")]/BLAH/BLAH[(@BLAH="SERVER")]/BLAH[(@name="CHECK")]/sampler[(@name="SAMPLE")][(@type="")]/table[(@name="TABLENAME2")]/rows/row[(@name="AROW")]/cell[(@column="ACELL")]
    path : /BLAH/BLAH1[(@name="BLAH2")]/BLAH/BLAH[(@BLAH="SERVER")]/BLAH[(@name="CHECK")]/sampler[(@name="SAMPLE")][(@type="")]/table[(@name="TABLENAME3")]/rows/row[(@name="AROW")]/cell[(@column="ACELL")]
    path : /BLAH/BLAH1[(@name="BLAH2")]/BLAH/BLAH[(@BLAH="SERVER")]/BLAH[(@name="CHECK")]/sampler[(@name="SAMPLE")][(@type="")]/table[(@name="TABLENAME4")]/rows/row[(@name="AROW")]/cell[(@column="ACELL")]
    

    (gnu) awk 来救援:

    $ awk -F@ '{ match($7, /"([^"]+)/, arr); print arr[1]}' input.txt
    TABLENAME1
    TABLENAME2
    TABLENAME3
    TABLENAME4
    

    【讨论】:

      【解决方案2】:
      sed -r "s/.*table\[\(@name=\"([A-Z]+).*/\1/" yourfile
      

      我只是做了一些假设。如果你能举出更多的例子,也许我可以准确地帮助你。 请记住,如果您想就地进行替换,您可以使用选项--in-place

      【讨论】:

      • 完美。这正是我想要的。你不知道你让我的生活变得多么轻松。
      猜你喜欢
      • 2010-11-07
      • 1970-01-01
      • 2022-08-13
      • 2014-02-05
      • 2011-01-23
      • 2019-03-24
      • 2020-11-03
      • 2020-10-09
      • 1970-01-01
      相关资源
      最近更新 更多