精确匹配字符串,忽略连字符等特殊字符

精确匹配字符串,忽略连字符等特殊字符

我有一个文本文件,例如

Data1 AppFlows
Data2 AppFlows-1

如果我做

grep '\bAppFlows\b' file

它打印了这两行,这意味着我们似乎没有考虑-边界

我环顾四周,发现了类似的东西

grep -w 'AppFlows$' file

但这并没有帮助。

任何打印具有精确字符匹配的行且输出如下的方法

Data1 AppFlows

答案1

问题是,这-w意味着“仅选择那些包含形成整个单词的匹配的行”。在您的情况下, the-确实被视为单词边界,这意味着AppFlows-1containsAppFlows就像“整个单词”一样AppFlows foo。现在,你的方法$失败了,因为 后面有空格AppFlows,所以你可以用 GNU 尝试这个grep

$ grep -wP 'AppFlows\w*$' file
Data1 AppFlows

当它作为一个完整的单词出现时,它将匹配AppFlows后跟 0 个或多个空白字符,直到行尾。

另一种方法是查找第二个字段恰好为 的行AppFlows

$ awk '$2=="AppFlows"' file
Data1 AppFlows

或者,如果您事先不知道它将是哪个字段,请使用:

$ awk '{ k=0;for(i=1;i<=NF;i++){ if($i=="AppFlows"){k++}}}k' file
Data1 AppFlows

答案2

我做了类似的事情

 egrep "(^|[^-])\AppFlows\b([^-]|$)"

对于任何偶然发现这一点的人

相关内容