Wildcards com caracteres reservados (*,?, +)

3

Eu tenho um log de dbpedia cheio de URLs. Alguns deles não são formatados, mas alguns têm alguma formatação, o que resulta em incontáveis símbolos. exemplo:

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";

Eu gostaria de reduzir vários símbolos de adição para apenas um. Eu estou um pouco familiarizado com sed e curingas, mas neste caso eu precisaria da + -wildcard para o símbolo + . Como posso conseguir isso?

    
por dv3 07.02.2017 / 17:07

1 resposta

4

Na sintaxe da expressão regular básica (BRE), um + é tratado literalmente, e para obter o significado especial de um-ou-mais ele precisa ser escapado:

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

Por outro lado, na sintaxe de expressão regular estendida (ERE), + é um quantificador por padrão e \+ restaura o significado literal:

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

Você pode evitar confusão usando o quantificador POSIX \{1,\} (BRE) ou {1,} (ERE):

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

sed -E 's/\+{1,}/+/g'
    
por steeldriver 07.02.2017 / 17:14