我实际上在撰写问题时解决了这个问题,但我认为它可能比我做的方式更整洁。
我想修剪空格和大多数标点符号,除了出现在 <>s 中的 url 合法内容(来自 rdf/n3 实体)。
源文本的一个示例是:
<this is a problem> <this_is_fine> "this is ok too" .
<http://WeDontNeedToTouchThis.> <http:ThisContains"Quotes'ThatWillBreakThings> "This should be 'left alone'." .
输出需要将空格转换为下划线并修剪引号以及 url/iri 中不合法的任何内容。
<http://This is a "problem">
=><http://This_is_a_problem>
这些都没用。
sed -e 's/\(<[^ ]*\) \(.*>\)/\1_\2/g' badDoc.n3 | head
sed '/</,/>/{s/ /_/g}' badDoc.n3 | head
我的最终解决方案似乎可行,是:
sed -e ':a;s/\(<[^> ]*\) \(.*>\)/\1_\2/g;ta' badDoc.n3 | sed -e ':b;s/\(<[:/%_a-zA-Z0-9.\-]*\)[^><:/%_a-zA-Z0-9.\-]\(.*>\)/\1\2/g;tb' > goodDoc.n3
有没有更好的办法?