【问题标题】:regex to replace optional underscore正则表达式替换可选的下划线
【发布时间】:2012-05-10 04:22:09
【问题描述】:

如果存在,我需要去掉下划线。

string VIEW VXABC expected result VIEW ABC
string VIEW V_XABC expected result VIEW ABC

这是我的尝试,但结果让我望而却步

echo "VIEW VXABC" |sed 's/VIEW V_?X/VIEW ABC/'
VIEW VXABC

【问题讨论】:

    标签: regex linux shell


    【解决方案1】:
    [me@home]$ echo VIEW V_XABC | sed -r 's/VIEW V_?X/VIEW /' 
    VIEW ABC
    [me@home]$ echo VIEW VXABC | sed -r 's/VIEW V_?X/VIEW /' 
    VIEW ABC
    

    注意-r 选项。来自man page

    -r, --regexp-extended
        use extended regular expressions in the script.
    

    【讨论】:

      【解决方案2】:

      检查这是否有帮助。

       sed -e 's/\(VIEW \)V[_X]\+\(ABC\)/\1 \2/'
      testing
      testing
      VIEW VXABC
      VIEW  ABC
      VIEW V_XABC
      VIEW  ABC
      

      【讨论】:

      • 是的,这也有效,请您详细说明您的正则表达式的作用
      • () 用于捕获。 [] 是字符类。 \+ 是一个或多个以前的令牌。
      • 非常感谢您的解释,是的,您的回答不仅正确,而且很有教育意义,希望我能同时获得两个答案
      【解决方案3】:

      尝试使用“扩展正则表达式”开关-E

      echo "VIEW VXABC" | sed -E 's/VIEW V_?X/VIEW ABC/'
      

      来自sed的手册页:

      -E, -r, --regexp-扩展

      在脚本中使用扩展的正则表达式(用于可移植性 POSIX -E)

      【讨论】:

      • 只是一件小事-上面可以让您查看 ABCABC-如果您只想剥离 V_?X echo "VIEW VXABC" | sed -E 's/V_?X//'
      • 回声视图 V_XABC | sed -e 's/VIEW V_?X/VIEW ABC/' VIEW V_XABC 也不是这个
      • 大写“E”?你用的是什么外壳?应该没什么区别,但是...我正在使用 BASH,这是我的输出: $>echo "VIEW VXABC" | sed -E 's/V_?X//' --> 查看ABC
      • 回声视图 V_XABC | sed -e 's/VIEW V(_)?X/VIEW ABC/' VIEW V_XABC
      • 回显 "VIEW VXABC" | sed -E 's/VIEW V_?X/VIEW ABC/' sed: 无效选项 -- E 我正在使用 bash,我的 sed 版本中没有大写 E 选项
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-22
      • 2012-09-29
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多