Я знаю, что партия вопросов была записана об этом, но не работала на меня. Я работаю в ударе и хотел бы, заменяют строку завершенными специальными символами:
echo "abm1c/def/sdfd/sync/sdff.jar/rtets.jar/fg/gdf/ggdg/dg/adg/TextParser$2.class," | sed -e "s#\([]*^+\.\$[-]\)##g"
Очевидно, вывод был неправильным. Можно ли предоставить мне корректное sed
команда.
Ваше регулярное выражение является неправильным. Похоже, что Вы пытаетесь использовать \( \)
определить класс символов. Вы не можете. Это - группы получения, они позволяют Вам обратиться к тому, что было подобрано в них как \1
(или \2
, \3
для последующих групп). Класс символов определяется с помощью []
. То, что Вы хотите сделать, получить любое соответствие класса символов для замены его собой, вышел:
$ echo 'abm1c/def/sdfd/sync/sdff.jar/rtets.jar/fg/gdf/ggdg/dg/adg/TextParser$2.class,' |
sed -e 's#\([]*^+.$[/]\)#\\\1#g'
Обратите внимание, что Вам aklso нужно ]
быть первым символом в классе символов. Иначе это, как предполагается, закрывающая скобка. И Вы не должны выходить .
или $
когда они в классе символов.
Наконец, Вы могли сделать этот вид вещи проще при помощи perl's 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\$2\.class\,