выйдите из специального символа с помощью sed не работающий

Я знаю, что партия вопросов была записана об этом, но не работала на меня. Я работаю в ударе и хотел бы, заменяют строку завершенными специальными символами:

echo "abm1c/def/sdfd/sync/sdff.jar/rtets.jar/fg/gdf/ggdg/dg/adg/TextParser$2.class," | sed -e "s#\([]*^+\.\$[-]\)##g"

Очевидно, вывод был неправильным. Можно ли предоставить мне корректное sed команда.

0
задан 25 July 2017 в 00:46

1 ответ

Ваше регулярное выражение является неправильным. Похоже, что Вы пытаетесь использовать \( \) определить класс символов. Вы не можете. Это - группы получения, они позволяют Вам обратиться к тому, что было подобрано в них как \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\,
2
ответ дан 2 November 2019 в 21:25

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

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