sed多行模式匹配在一行

时间:2013-12-08 01:09:14

标签: 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

我知道如何使用/(/)进行匹配和打印,但我找不到打印两个匹配的方法。

4 个答案:

答案 0 :(得分:1)

使用awk即可:

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

答案 1 :(得分:0)

使用括号,然后使用\1打印第一个匹配项,\2打印第二个匹配项,依此类推。

sed 's|<http://dbpedia.org/resource/\([^>]\+\)> <[^>]\+> <http://dbpedia.org/resource/\([^>]\+\)>.*|\1,\2|g' input.txt 
但是,有点冗长。将您的文本放入input.txt文件。

答案 2 :(得分:0)

比@ rendon的解决方案更简洁,但也更不准确:

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

如果它足够好,那么这更具可读性。

答案 3 :(得分:0)

这可能适合你(GNU sed):

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