我正在尝试编写一个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
我知道如何使用/(/)进行匹配和打印,但我找不到打印两个匹配的方法。
答案 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