【问题标题】:search with grep for words beginning and ending with用 grep 搜索开头和结尾的单词
【发布时间】:2013-01-26 00:25:49
【问题描述】:

如何 grep 以字符开头和结尾的内容

ABC-0
ABC-1
ABC-10
ABC-20

我想用 grep -v 表示 ABC-0 和 ABC-1

【问题讨论】:

    标签: regex grep


    【解决方案1】:

    如果您尝试匹配单词,请使用 \b 作为单词分隔符,如下所示:

    \b[A-Za-z]-\d+\b

    来自this reference

    \b - 匹配单词字符之间的位置(任何匹配的 \w) 和一个非单词字符(与 [^\w]\W 匹配的任何字符)以及 如果第一个和/或最后一个,则在字符串的开头和/或结尾 字符串中的字符是单词字符。

    【讨论】:

    • 虽然您可以在某些版本的 grep 中使用 "grep -P" 获得 PCRE 行为,但 \b 存在问题并且行为不可靠;特别是,它不会将制表符检测为单词边界字符('\b/www\n' 在 GNU grep 2.6.3 中被破坏)。如果这行得通,那将是最简洁的答案(我希望它行得通!)!
    • 当您想识别以空格或其他标点符号分隔的单词时,使用\b 非常有用,可以拆分诸如“word1,word2”之类的内容。其他时候,您会更喜欢 ^$,而不是只拆分空格并将“file.ext”之类的内容作为一个单词匹配。
    【解决方案2】:

    不清楚你的意思。如果你想在开头有一个字符,在结尾有两位数,你可以使用

    ^[A-Za-z].*\d\d$
    

    如果您只想要一个连字符,然后是一个 单个 数字,请使用:

    ^[A-Za-z].*-\d$
    

    如果您不在乎有多少位(一个或多个),但必须有一个连字符,请使用:

    ^[A-Za-z].*-\d+$
    

    如果这些都不是您想要的,请提供更多信息...您问题的第一句话与其余部分并不一致。

    【讨论】:

    • 您忘记了[A-Za-z] 的量词。
    • 或者更确切地说,我忘记了后面的其他内容 - 我们不知道 A00-10 是否可以接受。已修复,谢谢。
    【解决方案3】:

    你的例子

    egrep -v "^(ABC)-(0|1)$"
    

    就是答案。常见情况请看乔恩的回答

    ^ 标记模式的开始,$ 结束。 | 表示or

    【讨论】:

      猜你喜欢
      • 2013-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      相关资源
      最近更新 更多