【问题标题】:Regex to capture a whole word only using egrep正则表达式仅使用 egrep 捕获整个单词
【发布时间】:2012-09-12 23:41:04
【问题描述】:

我正在使用 egrep 来查看我们 perforce NAS 中的脚本。

我试图找到我们在哪里使用 RCP 和 RSH....我遇到的问题是 1)我在 REGEX 上很烂; 2) 我正在挑选我不感兴趣的垃圾。例如,如果一个文件有单词 strcpy..它会在 RCP..或所有权..点击 RSH。

显然我对这些不感兴趣,但我不想根据所有权或 strcpy 一词排除行...因为它们可能会结合使用...而且它不是一个完整的列表。

这是我的正则表达式

 'ftp|rcp|rsh' 

如何修改这些以访问 FTP,而不是 SFTP...rcp 但没有 strcpy,rsh 但不是所有权......等等?

所以我想要匹配的东西。

ftp
`ftp`
/ftp/
"PUNCT"FTP"PUNCT"

【问题讨论】:

  • 或者只是egrep -w 'ftp|rsh|rcp'
  • @tripleee:你应该把这个作为答案。
  • @tripleee -w 仅在 linux grep 上可用

标签: regex linux shell unix grep


【解决方案1】:

也许你需要这样的东西:

\b

\bpattern\b pattern,但不匹配 otherbigpatternthatyounotneed

【讨论】:

  • hmmm....这完全符合我的要求...但后来我意识到可能存在不同的问题。如果 rcp 被称为 /usr/bin/rcp ......那么也许我可以用两边都允许标点符号的单词边框来做到这一点?
  • 这有什么问题吗? '[^a-zA-Z0-9]\bftp\b[^a-zA-Z0-9]|[^a-zA-Z0-9]\brcp\b[^a-zA-Z0-9]|[^a-zA-Z0-9]\brsh\b[^a-zA-Z0-9]'
  • @nitrobass24: \b 在这种情况下也有效。就试一试吧。你不需要所有那些否定的字符类。
  • 所以它适用于 linux 但不适用于 HP...正则表达式不同吗?我认为它会与 POSIX 兼容。
【解决方案2】:

有几个元字符:

  • \b字边界
  • \<字开始
  • \>字尾

因此,一种可能的正则表达式是:\<(ftp|rcp|rsh)\>

【讨论】:

  • 所以这正是我想要的。我希望我早点注意到第二个答案。我已经对此进行了测试,它适用于 Linux 和 Solaris……但不适用于 HP-UX。您知道 HP 上的正则表达式有什么不同吗?
  • 它们也可能是 GNU 扩展。虽然我在grep 的信息页面中找不到它。您是否按照 cmets 中 triplee 的建议尝试过 -w
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
相关资源
最近更新 更多