Начинается со строки или нет в регулярном выражении - PullRequest
0 голосов
/ 26 декабря 2018

Я пытаюсь упростить приведенные ниже строки до одной строки:

sed -i 's/-XX\:PermSize=128m\s//g' /usr/share/hbase/conf/hbase-env.sh
sed -i 's/-XX\:MaxPermSize=128m\s//g' /usr/share/hbase/conf/hbase-env.sh

Я пытаюсь использовать нечто подобное этому -XX\:(?:Max|)PermSize=128m\s, но безуспешно.

Ответы [ 4 ]

0 голосов
/ 26 декабря 2018

Попробуйте это:

sed -ir 's/-XX\:(Max)?PermSize=128m\s//g' /usr/share/hbase/conf/hbase-env.sh

Лучше добавить r, чем со всеми этими побегами.Если вы используете GNU sed.

0 голосов
/ 26 декабря 2018

Вы можете сделать Max необязательным в необязательной группе (Max)?:

-XX\:(max)?PermSize=128m\s

Например:

sed -i 's/-XX\:(Max)?PermSize=128m\s//g' /usr/share/hbase/conf/hbase-env.sh
0 голосов
/ 26 декабря 2018

Обратите внимание, что (?:Max|) - это группа без захвата , и она не совместима с механизмом регулярных выражений POSIX, который используется sed.Вы используете движок BRE POSIX, поэтому для использования группы захвата вам нужно использовать \(...\), а для использования оператора чередования вам нужно \|.

Вы можете использовать

sed -i 's/-XX:\(Max\)\?PermSize=128m\s//g' /usr/share/hbase/conf/hbase-env.sh

Это выражение BRE POSIX, поэтому \(Max\)\? соответствует необязательной последовательности символов Max.

Или,

sed -i -E 's/-XX:(Max)?PermSize=128m\s//g' /usr/share/hbase/conf/hbase-env.sh

Опция -E включает ERE POSIXсинтаксис, необязательная последовательность символов Max определяется с помощью (Max)?.

См. online sed demo

s="ABC-XX:PermSize=128m DEF-XX:MaxPermSize=128m "
sed 's/-XX:\(Max\)\?PermSize=128m\s//g' <<< "$s"
# => ABCDEF
sed -E 's/-XX:(Max)?PermSize=128m\s//g' <<< "$s"
# => ABCDEF
0 голосов
/ 26 декабря 2018

Попробуйте

sed -i 's/-XX\:\(Max\)?PermSize=128m\s//g' /usr/share/hbase/conf/hbase-env.sh
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...