2014-10-06 60 views
1

我有幾百萬行,看起來像這樣。我正在尋找一種使用「TABLENAME」替換這些行的方法。 「TABLENAME」每次都會有所不同。 「TABLENAME」總是在這一行。基本上我正在尋找將此路徑轉換爲表名稱。我的想法是尋找第五次出現的「」,並用sed替換它的整個行。 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 

回答

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

我只是做了一些假設。如果你能提供更多的例子,也許我可以幫助你。 請記住,如果您想要替換就地您可以使用選項--in-place

+0

完美。這正是我想要的。你不知道你過我的生活有多容易。 – LinA 2014-10-07 12:21:25

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來救援:

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