Подстановочные знаки с зарезервированными символами (*?, +)

У меня есть журнал dbpedia, полный URL. Некоторые из них не отформатированы, но у некоторых есть некоторое форматирование, которое приводит к бесчисленному плюс символы. пример:

529e0532100c7d6f2b6ba4c093ff9581 - - [03/Jan/2014 00:00:00 +0100] "GET /sparql/?callback=a&default-graph-uri=http%3A%2F%2Fdbpedia.org&query=PREFIX+rdfs%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E+++++PREFIX+dbo%3A+%3Chttp%3A%2F%2Fdbpedia.org%2Fontology%2F%3E+++++++++++++++SELECT+%3Fpic%2C+%3Fabstract+WHERE+%7B+++++++++++++++++++++++++++%7B++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%3Fs+rdfs%3Alabel+%22%D0%A0%D0%B2%D0%BE%D1%82%D0%B0%22%40ru+.++++++++++++++++++++++++++%7B++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%3Fs+dbo%3Athumbnail+%3Fpic++%3B++++++++++++++++++++++++++++++++++++dbo%3Aabstract++%3Fabstract+++++++++++++++++++++++++++%7D++++++++++++++++++++++++++++++++++++++++++++++++++++++++UNION++++++++++++++++++++++++++++++++++++++++++++++++++++%7B++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%3Fs+dbo%3AwikiPageDisambiguates+%3FactualResource+.+++++++++++%3FactualResource+rdfs%3Alabel++++%3FredirectsTo+%3B+++++++++++++++++++++++++++++dbo%3Athumbnail+%3Fpic+++++++++%3B+++++++++++++++++++++++++++++dbo%3Aabstract++%3Fabstract++++++++++++++++++FILTER(lang(%3FredirectsTo)+%3D+%22ru%22)++++++++++++++++%7D++++++++++++++++++++++++++++++++++++++++++++++++++++++++UNION++++++++++++++++++++++++++++++++++++++++++++++++++++%7B++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%3Fs+dbo%3AwikiPageRedirects+%3FactualResource+.+++++++++++++++%3FactualResource+rdfs%3Alabel++++%3FredirectsTo+%3B+++++++++++++++++++++++++++++dbo%3Athumbnail+%3Fpic+++++++++%3B+++++++++++++++++++++++++++++dbo%3Aabstract++%3Fabstract++++++++++++++++++FILTER(lang(%3FredirectsTo)+%3D+%22ru%22)++++++++++++++++%7D++++++++++++++++++++++++++++++++++++++++++++++++++++%7D++++++++++++++++++++++++++++++++++++++++++++++++++++++++FILTER+(lang(%3Fabstract)+%3D+%22ru%22)++++++++++++++++++++++%7D+LIMIT+1+++++++++++++++++++++++++++++++++++++++++++++++&format=application%2Fjson&timeout=30000&debug=on&_=1388699454908 HTTP/1.0" 200 6845 "http://www.slovohvat.ru/g/g8FbJ" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1150.1 Iron/20.0.1150.1 Safari/536.11";

Я хотел бы уменьшить несколько плюс символы только к одному. Я несколько знаком с sed и подстановочные знаки, но в этом случае мне было бы нужно + - подстановочный знак для символа +. Как я могу достигнуть этого?

3
задан 9 February 2017 в 14:08

1 ответ

В синтаксисе основного регулярного выражения (BRE) + рассматривается буквально, и получить особое значение один или несколько его нужно оставить:

sed 's/+\+/+/g'

С другой стороны, в синтаксисе расширенного регулярного выражения (ERE), + квантор по умолчанию, и \+ восстановления буквальное значение:

sed -E 's/\++/+/g'

можно избежать некоторого беспорядка при помощи квантора POSIX \{1,\} (BRE) или {1,} (ДО):

sed 's/+\{1,\}/+/g'

sed -E 's/\+{1,}/+/g'
4
ответ дан 1 December 2019 в 15:51

Другие вопросы по тегам:

Похожие вопросы: