Обратите внимание, что (?: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