2013-12-08 90 views
-1

我想寫一個sed命令來轉換線:SED多模式在行內匹配

<http://dbpedia.org/resource/BoA> <http://dbpedia.org/ontology/wikiPageWikiLink> <http://dbpedia.org/resource/Ne-Yo> . 
<http://dbpedia.org/resource/BoA> <http://dbpedia.org/ontology/wikiPageWikiLink> <http://dbpedia.org/resource/Tablo> . 

BoA, Ne-Yo 
BoA, Tablo 

我知道如何搭配和印刷用/(/)但我找不到打印兩場比賽的方法。

+1

您需要爲AWK。發佈你已經嘗試過的東西也有幫助。 –

+0

'awk'將提供更優雅和可持續的解決方案恕我直言。 –

回答

0

使用圓括號,然後使用\1打印第一個匹配項,\2打印第二個匹配項,依此類推。

sed 's|<http://dbpedia.org/resource/\([^>]\+\)> <[^>]\+> <http://dbpedia.org/resource/\([^>]\+\)>.*|\1,\2|g' input.txt 

雖然有點冗長。把你的文本放入input.txt文件。

0

更簡潔,也比@倫登的解決方案不太準確:

sed -e 's?.*/resource/\([^>]*\)>.*/resource/\([^>]*\).*?\1, \2?' input.txt 

如果它足夠好,那麼這是更具可讀性。

1

使用awk你可以這樣做:

awk -F"[/>]" '/http/ {print $5 ", " $15}' file 
BoA, Ne-Yo 
BoA, Tablo 
0

這可能爲你工作(GNU SED):

sed -r 's|[^>]*/([^>]*)>.*/([^>]*).*|\1, \2|' file