我在编写问题的时候实际上已经解决了这个问题,但我认为它可能比我做得更干净。在sed中修剪尖括号内的空白空间
我想修剪<> s内出现的网址合法内容(来自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
有没有更好的办法?
不明白你想要做什么。源文本的输出是什么? – Kent 2013-03-13 09:57:20
我希望你认识到,你不能改变文件的含义,不能改变尖括号内的字符。更重要的是,“'”是n3中的一个保留字符,任何生成此类文件的内容都会被破坏并应该被修复。 – Recurse 2013-03-14 02:44:52
据我所知,我们正在生成n3,虽然它已在我们的导入过程中得到修复,但我正在处理一批包含IRI中未转义字符串的n3(大多数文件名包括引号),这些需要在我们之前清理可以处理该批次。 – user1616353 2013-03-14 20:55:32