我有数百万行看起来像这样。我正在寻找一种方法来使用" 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
答案 0 :(得分:1)
sed -r "s/.*table\[\(@name=\"([A-Z]+).*/\1/" yourfile
我刚做了一些假设。如果您提供更多示例,我可以帮助您。
请注意,如果您想要替换就地,可以使用选项--in-place
答案 1 :(得分:0)
不知道我是否完全理解,但请考虑以下输入:
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 -F@ '{ match($7, /"([^"]+)/, arr); print arr[1]}' input.txt
TABLENAME1
TABLENAME2
TABLENAME3
TABLENAME4