Я на самом деле решил это, составляя вопрос, но я думаю, что он может быть более аккуратным, чем то, как я это делал.обрезание пробелов внутри угловых скобок в sed
Я хотел обрезать пробелы и большинство пунктуации, кроме юридических документов (из rdf/n3 сущностей), которые появляются внутри <> s.
Пример исходного текста будет:
<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
Надеюсь, вы понимаете, что вы не можете изменять символы в угловых скобках без изменения значения файла. Более того, «« »является зарезервированным символом в n3, и все, что генерирует такие файлы, сломано и должно быть исправлено. – Recurse
Я понимаю, что мы генерируем n3, и хотя он был зафиксирован в нашем процессе импорта, я имел дело с партией n3, которая включала неизученные строки в IRI (в основном имена файлов, включая кавычки), их нужно было очистить, прежде чем мы может обрабатывать эту партию. – user1616353