插入一行并将其替换为该行中的内容

时间:2014-10-09 17:58:19

标签: shell unix sed

我有数百万行看起来像这样。我正在寻找一种方法来替换这些线条" TABLENAME"是。 " TABLENAME"每次都可以不同。 " TABLENAME"总是在这一行。基本上我希望将此路径转换为" TABLENAME"。我的想法是寻找第五次出现的" "并用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

最初我可以使用

sed -r "s/.*table\[\(@name=\"([A-Z]+).*/\1/" myfile

按照另一个stackoverflower的建议来做这个,但看起来它不起作用,因为在路径之前有额外的8个间距。如果我删除8个间距,这个代码将起作用,但由于我在java中调用它的方式,这些空间总是会在那里。这个命令有解决方法吗?

1 个答案:

答案 0 :(得分:0)

如果表格[(@ name =“TABLENAME”)]每行只出现一次,您可以使用:

sed 's/\(.*\)table/table/g' | cut -d ")" -f 1 | cut -d "=" -f 2

输出:

sdlcb@Goofy-Gen:~/AMD$ echo "/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 's/\(.*\)table/table/g' | cut -d ")" -f 1 | cut -d "=" -f 2
TABLENAME
sdlcb@Goofy-Gen:~/AMD$

在示例中,我只是回显字符串和处理。如果从文件(即文件中的字符串)处理,则输出将为“TABLENAME”。

sed 's/\(.*\)table/table/g' | cut -d ")" -f 1 | cut -d "=" -f 2 | sed 's/"//g'