代码之家  ›  专栏  ›  技术社区  ›  Bruno Wego

是否以正则表达式中的字符串开头

  •  0
  • Bruno Wego  · 技术社区  · 6 年前

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

    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 回复  |  直到 6 年前
        1
  •  1
  •   Tyl    6 年前

    试试这个:

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

    更好地添加 r 比那些逃亡的人还要多。如果您使用的是GNU SED。

        2
  •  4
  •   Wiktor Stribiżew    6 年前

    注意 (?:Max|) 是一个 非捕获 并且它不符合posix regex引擎 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)? .

    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
    
        3
  •  3
  •   The fourth bird    6 年前

    你可以做 Max 可选组中的可选 (Max)? :

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

    例如:

    sed -i 's/-XX\:(Max)?PermSize=128m\s//g' /usr/share/hbase/conf/hbase-env.sh
    
        4
  •  2
  •   iBug    6 年前

    尝试

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