Sua expressão regular está errada. Parece que você está tentando usar \( \)
para definir uma classe de caracteres. Você não pode. Esses são grupos de captura, eles permitem que você se refira ao que foi correspondido dentro deles como (ou
,
para grupos subseqüentes). Uma classe de caracteres é definida usando
[]
. O que você quer fazer é capturar qualquer correspondência da classe de caracteres para substituí-la por ela mesma:
$ echo 'abm1c/def/sdfd/sync/sdff.jar/rtets.jar/fg/gdf/ggdg/dg/adg/TextParser$2.class,' |
sed -e 's#\([]*^+.$[/]\)#\#g'
Note que você também precisa do ]
para ser o primeiro caractere na classe de caractere. Caso contrário, é assumido como sendo o colchete de fechamento. E você não precisa escapar de .
ou $
quando eles estão dentro de uma classe de caracteres.
Finalmente, você poderia fazer esse tipo de coisa mais simplesmente usando quotemeta
:
$ echo 'abm1c/def/sdfd/sync/sdff.jar/rtets.jar/fg/gdf/ggdg/dg/adg/TextParser$2.class,' |
perl -lne 'print quotemeta()'
abm1c\/def\/sdfd\/sync\/sdff\.jar\/rtets\.jar\/fg\/gdf\/ggdg\/dg\/adg\/TextParser\\.class\,