【问题标题】:Linux -> Terminal command -> Grep -> Expressions / Exceptions related to symbolLinux -> 终端命令 -> Grep -> 与符号相关的表达式/异常
【发布时间】:2015-05-30 18:03:58
【问题描述】:

简单地说:我的命令有问题,它应该打印包含以下两个表达式中的任何一个的行:“king”“king's son”。这是我到目前为止的地方:

grep -w "king's son\|king" frog.txt

它确实有效,但它包括不应该发生的“国王”

添加 -v grep "king's" 不起作用,因为它还会删除 “国王的儿子”

我使用的是安装在 Virtual Box Machine 上的 Ubuntu 32 位系统。

【问题讨论】:

  • 由于您无法从其他用户那里获得正确答案,请考虑留下frog.txt的内容。
  • 我得到了解决我问题的答案:stackoverflow.com/a/30550218/4956820
  • 对不起,我忽略了它,可能是因为它没有被赞成也没有被接受。如果该答案实际上是您问题的解决方案,您至少应该接受它。 whereswalden 和未来的读者肯定会欣赏它。 :)
  • 我回滚了您的最终编辑。检查答案以接受它是完全足够的;这个问题应该只是一个问题,而不是评论。

标签: linux bash shell grep


【解决方案1】:

-w 不会有太大帮助,因为 kingking's 中被视为一个单词,因为 ' 是一个非单词字符。

用途:

grep -E "([[:space:]]|^)king('s son)?([[:space:]]|$)" frog.txt

如果您的 grep 有可用的 PCRE 选项,则使用 lookarounds

grep -P "(?<=[[:space:]]|^)king('s son)?(?=[[:space:]]|$)" frog.txt

【讨论】:

  • 它们都不起作用,第二个也给了我“break”的台词。
  • 这两个命令都有效。如果king 之后可能出现制表符,请使用:grep -E "king('s son)?([[:space:]]|$)" frog.txt
【解决方案2】:

应该这样做:

grep -E "(^|[ \t])(king|king's son)([ \t]|$)" frog.txt

它使用 (^|[ \t])([ \t]|$) 组来匹配单词分隔符或行的开头/结尾。

【讨论】:

  • 它有效,谢谢您的回复。它可以正常工作,避免添加“国王的城堡”之类的东西。再一次感谢你。请加上这个答案,以便与我处于相同情况的人找到解决方案。
【解决方案3】:
grep -E "([[:space:]]|^)king('s son)?([[:space:]]|$)" frog.txt

例如,如果frog.txt 包含

kingb    # no match
king's   # no match
king-bee # no match 
breaking # no match
king's hello # no match
king's sonth # no match

king     # match
a king bee  # match
king    bee # match (with a TAB)
king's son  # match

然后上面的命令返回

king     # match
a king bee  # match
king    bee # match (with a TAB)
king's son  # match

【讨论】:

  • 他们都只返回带有“国王的儿子”的行。
  • \s 在大多数 grep 方言中不是有效的空白元表达式。尝试将其替换为[[:space:]]
【解决方案4】:
grep -w "king's son\|king$" frog.txt

【讨论】:

  • 它只显示包含“国王的儿子”的行,这不是我想要得到的结果。感谢您的回复。
【解决方案5】:

以下行可能适合您的情况。

grep -w "king's son\|king$\|king\ " frog.txt

结果是:

king's son   #match
king         #match
king's hello #not match

【讨论】:

  • @Advent:请告诉我们如何它不起作用。举一个失败的例子。那么也许我们可以改进答案。
  • 你能举几个例子吗?
  • 这个命令将我发送到它被卡住的文本样式,我无法通过关闭终端以外的其他方式退出它。它没有任何作用,至少对我而言。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-30
  • 2020-10-09
  • 2013-07-03
  • 2021-01-11
  • 2014-08-31
  • 1970-01-01
相关资源
最近更新 更多