以字符串开头或不以正则表达式开头

时间:2018-12-26 15:04:39

标签: regex sed

我正在尝试将下面的行简化为单行:

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 :(得分:4)

请注意,(?:Max|)是一个不可捕获的组,它与sed使用的POSIX正则表达式引擎不兼容。您正在使用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

答案 1 :(得分:3)

您可以在可选组Max中将(Max)?设置为可选:

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

例如:

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

答案 2 :(得分:2)

尝试

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

答案 3 :(得分:1)

尝试一下:

private void addInfoIcon(Drawable infoIconDrawable) {
    int infoIconSizePx = getResources().getDimensionPixelSize(R.dimen.info_icon_size);
    final ImageView ivInfoIcon = new ImageView(getContext());
    ivInfoIcon.setLayoutParams(new LayoutParams(infoIconSizePx, infoIconSizePx));
    ivInfoIcon.setImageDrawable(infoIconDrawable);

    rlInfo.addView(ivInfoIcon);
}

最好添加sed -ir 's/-XX\:(Max)?PermSize=128m\s//g' /usr/share/hbase/conf/hbase-env.sh ,而不是添加所有转义符。如果您使用的是GNU sed。