2013-12-08 91 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