代码之家  ›  专栏  ›  技术社区  ›  Ryan

bash中的正则表达式

  •  2
  • Ryan  · 技术社区  · 16 年前

    我在发疯,希望有人能回答我的问题!

    我最近开始在Java编程中学习正则表达式,但我有点困惑如何在BASH中直接获得某些特性。例如,下面的代码没有按我认为的那样工作。

    echo 2222 | grep '2\{2\}'
    

    我期待它回来:

    22
    

    我尝试过它的变体,包括:

    echo 2222 | grep '2{2}'
    echo 2222 | grep -P '2\{2\}'
    echo 2222 | grep -E '2\{2\}'
    

    但是我完全没有主意了。我相信这是一个简单的参数/语法修复程序,希望得到一些帮助!我已经做了大量的谷歌搜索,我在bash中发现的每一个引用都不起作用;regex可以在这么多不同的平台和引擎上运行。=/

    4 回复  |  直到 16 年前
        1
  •  9
  •   Tim    16 年前
    echo 2222 | grep -E '2{2}'
    2222
    

    正则表达式将在行上进行模式匹配,如果匹配,则打印出整行(2222),如果不匹配,则不打印任何内容。

    它不会抽出输出的一部分。为此,你需要像sed这样的东西:

    echo 2222 | sed 's/.*\(2\{2\}\).*/\1/'
    22
    
        2
  •  4
  •   Ignacio Vazquez-Abrams    16 年前

    你可以使用:

    echo 2222 | grep -o '2\{2\}'
    

    除了 它将显示两次输出,因为它在该行上匹配了两次。

        3
  •  1
  •   Darkyo    16 年前

    你没试过

    echo 2222 | grep -E '2{2}'
    

    会回来的 2222也就是说“它符合你的线路”

    sed可以帮助您可视化regexp

    echo 22 33 342 22 | sed  's/2\{2\}/<match>/g'
    

    例如返回

    <match> 33 342 <match>
    
        4
  •  1
  •   ghostdog74    16 年前

    如果只在字符串开头搜索两个“2”,则无需使用外部工具

    string=2222
    case "$string" in
     22*) echo "ok";;
    esac